×Закрыть

Программистские ошибки для чайников

Обложка книги, COTOHA pressКонспект лекции «Типичные ошибки начинающих программистов», прочитанной в ИНЖЕКе 29 сентября 2008 года. Думаю, будет полезна и всем остальным студентам... а может и не только.

Вступление

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

О лекторе

Для начала обо мне. Я (как вам, наверное, уже должны были сказать) работаю в компании NIX Solutions Ltd. на должности директора по обучению и развитию персонала. Кроме того я успел поработать php-разработчиком, менеджером отдела продаж, начальником отдела продаж, менеджером проектов, начальником отдела php и начальником отдела .net. Это чтобы вы понимали, что эта моя лекция про ошибки начинающих программистов, которую меня попросили вам прочитать, не просто теория очередного менеджера о том, что должны делать идеальные программисты. Всё что я расскажу — суровая правда жизни. Я сам совершал многие из этих ошибок, и я постоянно вижу, как их совершают новички у нас на фирме.

Мотивация

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

Про ошибки

Ошибок, которые совершают начинающие программисты, очень-очень много. Чтобы не перечислять их все (на что не хватит времени), я решил попытаться их сгруппировать и рассмотреть наиболее типичные группы.

Ошибки

Я решил разделить ошибки на детские, тактические и стратегические. Такое разделение больше применительно для студентов, пишущих лабы, курсовики и дипломы, чем для работников IT-контор, участвующих в реальных проектах. Но, к сожалению, и среди последних встречаются те, к кому это можно приложить. Может это потому, что работники IT-контор часто являются студентами? :)

Детские

Это самые заметные ошибки, т.к. они видны прямо в коде программы и/или ы результатах её работы. Они просто бесят соработников и менеджеров проектов.
  1. Невнимание к деталям. Едва ли не основным признаком профессионала является внимание к деталям. В профессиональном приложении вы никогда не увидите ничего из ниже перечисленного:
    • Недоформатирование текстов/Недовыравнивание элементов форм. Куски лейбочек, который вылезают за панели; кнопки, которые перекрывают лейбы; тексты, которые уползают за край формы.
    • Отсутствие единообразия в интерфейсе, форматировании тектов, расположении форм. Это тот случай, когда лучше «безобразно, но единообразно». Это же, кстати, отличает айтишников от всех остальных при использовании MS Word: айтишники используют стили, и потом могут легко менять вид документа, изменяя стили, а остальные каждый элемент форматируют вручную и при необходимости изменить вид заголовка второго уровня переформатировывают все заголовки 2го уровня в доке.
    • Неучитывание возможности изменения размеров формы. Самый обычный вариант тут — просто забыть о том, что формы могут меняться, забыть установить значения минимальной и максимальной ширины и высоты. Самый некрасивый и неюзабельный — задать абсолютную привязку ко всем сторонам формы, так что контролы наедут друг на друга при её увеличении. Также часто забывают запретить «распахивать» окно, хотя запрещают «ресайз».
    • Использование названий контролов, которые за вас придумала IDE. Button1, Form2, открытьИзображениеToolStripMenuItem_Click. Этого делать нельзя, т.к. радикально ухудшает читабельность кода, а значит увеличивает стоимость его поддержки. Вообще «неговорящие» названия контролов плохо. Говорящие по-русски — спорно, т.к. часто вы будете писать приложения для заграничных заказчиков, а это означает, что русские названия методов не пройдёт процедуру приёмки исходного кода.
    • Сортировка числовых значений по правилам строк. Это часто происходит, когда значения хранятся в виде цифр (15.45), а отображаются в строковом виде (15грн.45коп.). И сортировки выполняются средствами стандартных компонентов. Надо это учитывать и реализовывать сортировки как надо.
  2. Смешение парадигм процедурного и объектно-ориентированного программирования. К сожалению, на собеседованиях я очень редко встречаю претендентов, которые бы могли внятно объяснить, чем ООП лучшее. Более того — мало кто может сказать, лучше чем что. Естественно, что не понимая, зачем ООП нужно, оно применяется неправильно.
    • Применение ООП для отмазки. Чем применять ООП «для галочки», лучше его не применять вообще, т.к. с одной стороны выглядят эти попытки жалко, а с другой запутывают ваших товарищей, которые ожидают «правильного» использования ООП, раз уж оно вообще использовано.
    • Использование «глобальных переменных». Особенно в виде «Form1.condition». Это снижает читабельность кода и является симптомом того, что вы неправильно спроектировали приложение.
    • Использование статических методов, для решения бизнес-задачи. Если у вашего класса есть только поведение (методы), но нет свойств (полей), значит, вы неправильно провели анализ предметной области (не всегда, но чаще всего).
  3. Неправильные комментарии. Комментарии — это отличный помощник, если их использовать по назначению. Многие игнорируют этот факт.
    • Не писать вообще. Cowboy-style. Хорошо, что преподаватели стараются с этим бороться... и порождают следующую проблему.
    • Писать очевидные комментарии. Когда что-то делается из-под палки, это всегда делается плохо. Так и тут — особенно умиляют комментарии вида «int a; // объявляем переменную». Выглядит как издёвка (особенно, если через две строчки следует алгоритм без единого комментария с кучей циклов, ифов, break’ов и с несколькими return’ами), а издеваться над сотрудниками (и преподавателями) мало того, что нехорошо, так ещё и чревато.
    • Не описывать метод/класс. С этим старается бороться IDE. Не надо ей мешать — она знает, что делает. Автодоки сохраняют время всей команде и вам лично, когда приходит время писать документацию на проект.
  4. Неследование code conventions. Стандарты кодирования позволяют вам разобраться в чужом коде (или кому-то в вашем) намного быстрее и легче. Обычно программисты подсознательно следуют какому-то одному стилю, но встречаются и такие у которых 7 пятниц на неделе. В любом случае, я советую явно выбрать подходящий стиль и стараться ему следовать. По умолчанию можно использовать стандарты кодирования pear для php, sun для java и Microsoft для семейства .net.
    • Хаотичное форматирование кода. Самый клинический случай, это когда у одного и того же человека разные куски кода отличаются по форматированию. Некоторые даже говорят, что это признак маниакально-депрессивного психоза. Ну или ему просто курсовик помогали писать соседи по общаге :)
    • Каждый член команды использует удобную ему конвенцию. Это менее плохо, но тоже не хорошо. Для работы в команде просто необходимо принять общий стандарт кодирования, иначе это будет не работа в команде, а просто работа над одним проектом.
Детские ошибки можно перечислять и перечислять, но я ограничился только теми ошибками, которые я встретил в ваших работах больше 3х раз.

Тактические

Тактические ошибки — это ошибки, которые не напрямую связаны с кодом, а больше связаны с краткосрочными целями, которые преследует программист, при его написании.
  1. Не иметь правильной цели для проекта. Первой и главной целью при написании курсовых, лаб и дипломов необходимо ставить «поднять свой уровень», а не «отмазаться от преподавателя». Подумайте, ведь в большинстве случаев, когда вы придёте на собеседование, эти программы будут единственным, чем вы сможете похвастаться — может стоить сделать их хорошо?
  2. И так сойдёт. Отсутствие правильно цели приводит к тому, что программы делаются «тяп-ляп», как у зайца в старом мультике (все помнят?). В двух словах — на пользу это ему не пошло. Можно выделить несколько подпунктов:
    • Размещение бизнес-логики в обработчиках событий. Это наверное самая распространённая ошибка, которую совершают абсолютно все. Можем провести эксперимент — пусть честные люди поднимут руки, если они помещали решение задачи в какой-нибудь «onClick». Я так и думал... честных людей мало :) Чтобы побороть эту ошибку есть теоретически простой, но сложный в реализации метод... но полезный: сначала нужно написать консольное приложение, а потом докрутить к нему GUI.
    • Тестирования приложения только на допустимых значениях. Удивительно, как много приложений падает, как только ввести в поле для ввода цифр буквы. Когда вы пишете приложение, необходимо рассчитывать не на дружеского пользователя, а на агрессивную обезьяну, которая может ввести что угодно и нажать куда угодно. Приложение должно на всё реагировать корректно.
    • Хардкод. Внесение конфигурационных параметров, строковых литералов, магических цифр в код — это плохо. Для этого давным-давно придуманы специальные средства — конфигурационные файлы, файлы ресурсов, формы настроек. По возможности необходимо избегать перекомпиляции приложения, для его настройки, т.к. в реальном мире, за перекомпиляцией следует фаза развёртывания, а это очень дорого.
    • Копи-паст. Дублирование кода увеличивает стоимость его поддержки — ведь в любом коде будут производится изменения, это данность. От этого никуда деться нельзя, а значит надо будет вместо одного изменения производить много (в зависимости от количества скопированных кусков) и ещё и синхронизировать их. За правило надо взять принцип, что если какой-то кусок кода понадобился больше двух раз, то его надо выделить в метод, класс или модуль.
    • Плохой русский/украинский/английский в сопроводительной документации. Документация — это неотъемлемая часть проекта. Если документацию неприятно читать, то это отношение распространится на весь проект в целом. Что я имею в виду? Например, откровенные глупости в части про БЖД, которые кочуют из записки в записку. (Я уже говорил, что копи-паст это плохо? на документацию это тоже распространяется). Или излишне вольное обращение с украинским языком, например «разрешение монитора», это «роздільна здатніcть», а не «дозвіл», как практически у всех вас в записках.
  3. Несоответствие результата и цели. Если реализовывать что-то «тяп-ляп», то и результат получается посредственный. Любая программа решает некую бизнес задачу — вот реализация этой бизнес-задачи и есть цель вашего проекта, а значит и результат должен быть этой же реализацией. Например, если вам дали курсовой на тему «однопользовательская игра с графическим интерфейсом», то вам надо сконцентрироваться на игре, на её динамике, на удобстве интерфейса, на функциях, характерных для игр — тогда в результате у вас будет (сюрприз!) интересная однопользовательская игра. Но в большинстве случаев студенты концентрируются на том, чтобы просто сдать курсач. В итоге получается скучная игра, которой неудобно пользоваться, обёрнутая в стандартный для windows-приложений интерфейс — стандартный проект-отмазка. Это не правильно. В первую очередь надо решить поставленную задачу — это позволит вам повысить свой уровень в программировании и анализе, и как приятный побочный эффект позволит вам получить высокую оценку за неё.
    • Недостаточная проработка теоретической части проекта. Очень часто встречаются проекты, в которых не понятна задача, которую они решают. Не секрет, что большинство студенческих проектов — это некие интерфейсы к базам данных. Например, учёт книг в библиотеке, учёт шахт на Украине, учёт студентов в деканате. Это разные цели. А результат у всех один и тот же — они, по сути, они как братья близнецы — формы редактирования, поиска и добавления новых записей. ЭТО НЕ ИНТЕРЕСНО. И это не правильно. Если вы хотите добавить интереса в ваш проект, то опишите, какие насущные задачи решает проект, какие реальные процессы он автоматизирует. Не зацикливайтесь на добавлении и редактировании записей — ведь в большинстве случаев руками никто ничего добавлять не будет, т.к. базы данных уже есть и их надо просто импортировать. Редактирование не такой частый процесс — разве что кто-то выйдет замуж и сменит фамилию (если говорить про учёт студентов). Сконцентрируйтесь на правах доступа, на вариантах поиска, на том, что реально нужно. Сходите в деканат и спросите — чего нужно его работникам. Это зачтётся.
  4. Обман. Да самый обычный обман пользователей (в частном случае преподавателей).
    • Если в приложении заявлена некая функциональность, то её или надо реализовать в соответствии с требованиями или в сопровождающей документации указать на ограниченность реализации. Последний пример, который приходит на ум это «экспорт в формате MS Excel». Один из ваших товарищей реализовал это в виде генерации файла значений, разделённых пробелом, которому назначалось расширение XLS. Эксель, конечно, его открывал и автоматически распарсивал, но по сути это был обман, т.к. другие офисные системы, которые читают формат XLS, его уже не понимали. Обман производит дурное впечатление, хотя одна всего лишь фраза в документации о том, что эта функция реализована в ограниченном объёме могла бы всё исправить.
    • Не использовать/неправильно использовать ООП в курсовом по предмету «объекто-ориентированное программирование» — это тоже обман.
    • покупать лабы/курсовые/дипломы — это тоже обман. Хорошо, если вы не собираетесь становиться программистом — тогда вы обманываете только преподавателя. Но если у вас есть такие планы, то вы обманываете ещё и себя.

Стратегические

Стратегические ошибки — это ошибки стиля жизни. Они связаны с долгосрочными целями или — чаще — с их отсутствием :)
  1. Не знать, кем и почему вы хотите стать. Это основная ошибка студентов. Они думают, что до окончания ВУЗа, этот вопрос ещё не актуален. А на самом деле потом, а может быть уже и сейчас, будет поздно. Первый вопрос, который я задаю на собеседованиях: «Почему ты решил стать программистом / тестировщиком / аналитиком?» И с грустью не слышу ничего вразумительного в ответ. Это важно прежде всего для вас — если вы НЕ понимаете, почему вы хотите стать программистом, то может быть вы вовсе и не хотите им становиться? Может вы модельер, а тут только тратите своё время? Подумайте...
  2. Не пытаться улучшить свой скил в программировании. Второй вопрос на собеседовании, который я задаю всем: «Что ты делаешь, чтобы стать тем, кем ты хочешь стать?» Опять же очень не часто, мне могут ответить что-то кроме «учусь на соответствующей специальности». Этого мало.
    • Не читать книг по теме. Мне это странно, но не многие читают книги, а надо — там много полезного. Кто сходу может назвать автора какой-нибудь книги по .NET? А ещё одного? А третьего? На первый вопрос ответило 10 человек из 60, на второй 3, а на третий ни одного...
    • Не писать программ, помимо лаб, курсовых и дипломов. Это мне странно больше всего. Если вы хотите стать программистом, то почему не пишете программ? На собеседованиях некоторые на вопрос «почему программирование?» задумываются и говорят что-то вроде: «я люблю творить». Так почему не творишь? Ну да, я понимаю, что конъюнктура рынка сейчас такая, что ай-ти-специальности популярны и многие идут туда ради приличного заработка, а не тварьбы. Но тогда возникает вопрос — почему вы не выполняете курсовые и дипломы качественно и профессионально? Ведь чем вы лучше себя покажете на собеседовании, тем лучше вам предложат стартовые условия.
    • Не следить за новостями в мире выбранной технологии. Я про новости с основных сайтов по технологиям, про блоги ведущих разработчиков, про новые книги и т.д. В ВУЗе вам просто физически не могут дать мейнстрим. Вам надо понять, что вас обучают не программировании на сишарпе, а программировать на примере сишарпа. Это значит, что вам никто не мешает использовать .NET Framework 3.5, LINQ и Entity Framework, хотя и не заставляют. Это ваш выбор — надо только не лениться его сделать.
    • Не проходить различные программы сертификации. Это момент конечно спорный, т.к. они денег стоят, но они окупаются. Кроме того, вам же всё равно надо учить .net, java или php, так почему бы не поучить по специальной литературе, по подготовке к сертификациям?
  3. Не знать английского. Это вообще не обсуждается: хочешь работать в ай-ти — надо знать английский. Английский сейчас де-факто стандарт в ай-ти. Помимо того, что основная масса продуктов разрабатывается для англоязычных стран, есть ещё очень важная причина: документации к продуктам/API на неанглийском не существует. Её так мало, что ей реально можно пренебречь. А так что есть, отстаёт от английской версии на полгода минимум.

А теперь самое важное

Самое важное, что вы тут должны были увидеть — это то, что детские ошибки часто являются результатом тактических, а тактические — следствие стратегических. По большому счёту, можно всё решить одним махом — исправить стратегическую ошибку № 2 :) Если это сделать, т.е. захотеть стать хорошим программистом, то тактические и детские ошибки... нет, не пропадут, но по крайней мере из системных перейдут в категорию случайных. А случайные ошибки легко устраняются опытом. Системные же ошибки препятствуют накоплению опыта.

Заключение

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

Примечания

  1. По ходу лекции больше всех записывал завкафедрой. И много кивал.
  2. На вопрос про «логику в обработчиках onClick» руку не поднял не один. Мучаюсь теперь вопросом — а может надо было спросить «кто знает, что такое обработчики событий onClick?»
  3. Из авторов вспомнили только Троелсена и Сеппу, то есть вообще-то одного, т.к. Сеппа по ADO книгу написал, а не по .NET. Шилдт и Рихтер видимо из моды вышли...

COTOHA,
Сентябрь 2008

  • Популярное

127 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

К сожалению, на собеседованиях я очень редко встречаю претендентов, которые бы могли внятно объяснить, чем ООП лучшее. Более того — мало кто может сказать, лучше чем что.

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

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

Сохранили нам кучу времени, спс.

Ничего нового неувидел, но всё же новость для чайников. Если нету опыта — тема как раз для вас!

как правило, все это знают и всё равно умудряются делать неправильно. Другими словами автор статьи не сказал ничего нового, а просто систематизировал то, что было у всех в голове, но по разным полушариям:) как говориться, повторение — мать учения. я уверен, что перечитав эту статью процентов 30 будут по-старому прибегать к этим ошибкам, как детским, так и не. Лишний раз перечитать не мешает. автор +5

Не увидел ничего нового и потрясного чтобы помогло! ИМХО чтобы подчеркнуть ошибку, нужно её показать... Нет примеров ошибок и нет примеров исправления этих ошибок... Сплошное голословие в статье!

Книги читать надо, вот только какие? Читал когда-то много лет про проектирование, ООП, Буча, UML, CASE и многая жуткая мутные словеса. Забил голову себеокончательно.Долго разбирался, опровергал и сражался у себя в голове.Потом открыл Фаулера и поразился: до чего умно пишет человек! Гениальный тип — я с ним почти во всем согласен!!! Потом случайно открыл «Турбо Паскаль 5.5» Полякова& Круглова и еще раз поразился:, а ведь я это читал и применял, а потом забыл, как же так??? Вывод: ПОМНИТЕ, ЧТО КНИГИ МОГУТ ПИСАТЬСЯ МОШЕННИКАМИ, популяризующими очередную свою CASE-софтину.Читать такую рекламную макулатуру вредно для умственногоздоровья.P.S. Бизнес-логики не существует — просто есть ООП-код, а естькод программистов, читавших много макулатуры.P.S. v. 2.0: Абсолютные истины существует лишь в воображениипреподавателей. К примеру, если вы знаете, что ваши способности знают, то не будете гоняться за демонстрациями «признаков профессиональности», а будете аляповато набрасывать эскизы форм до тех пор, пока их не утвердят — и вот тогда-то и начнетеконтролы равнять под лупу, если навязанная вам IDE настолько тупа, что не содержит возможности выравнивания по сетке.

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

2 Сергей

Мне кажется что студентам надо читать вот такие лекции

судя по содержанию, то эта лекция не для студентов, а для преподов или для министерства образования.

2Сергей

Мне кажется что студентам надо читать вот такие лекцииhttp://www.e64f.ru/? page_id=12

> кто-то захочет изучить более подробно спецкурс, посвященный веб-технологиям, а кому-то больше понравится освоение тонкостей анимации в 3D Studio Max или редактирования графики в PhotoShopС этим, пожалуйста, в ПТУ. Не следует добивать наше и так полудохлое высшее образование. В вузе должны давать хорошую научную базу, а не учить модному (в этом месяце) веб-фреймворку.

Мне кажется что студентам надо читать вот такие лекцииhttp://www.e64f.ru/? page_id=12

Нет? Знач ошибся. Я в таких эмпиреях не летаю.

Написал предыдущий пост и вспомнил историю из жизни: Надо было сотворить, скорее даже портировать с РС на кастомную эмбеддед платформу, несложную приблуду. Поручено это было именно вот таким вот «мастерам С++».Главной задачей было обрубить лишний функционал, чтобы влезть в память (то ли 8 то ли 16 метров, на которых уже жила операционка) и обеспечить работу 24×7, другими словами тщательно обрезать все мемори-лики, т.е. минимизровать использование new и эксепшенов. «Мастера С++» три дня думали, а на четвертый сказали что без std: string жизни им не будет и затребовали STL. Начальство почесало репу и скрепя сердце согласилось.Ну раз такая пьянка, «мастера С++» не стали себя ограничивать и от души набросали в код векторов и мэпов.Через неделю им понадобился CRC. А как известно настоящие джедаи CRC ручками не пишут, они подключают boost. Как они убедили начальство — не знаю. Но раз разрешили, они потащили в код тип any и все остальное.Еще через неделю, уж не знаю из каких соображений, им позарез понадобился Александресковский ACE.Начальство уже просто махнуло рукой (подозреваю, что уже тогда списав проект), и они быстренько подключили и его.Когда же еще через две недели это чудо было скомпилировано, оказалось что бинарник больше всего объема флэша, а стек сравним со всей доступной оперативкой.

xhalt

Дня начала, попытайтесь всё-же предотвратить это, создав здоровую культуру способствующую написанию понятного кода...

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

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

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

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

Я б сказал по другому — сложные и не до конца понятные приемы — есть главный источниик плохо предсказуемых сайд-эффектов. Разумный человек минимизирует их использование. Дурак с инициативой разбрасывает щедрой рукой сеятеля.

Дня начала, попытайтесь всё-же предотвратить это, создав здоровую культуру способствующую написанию понятного кода...Как прикажете рефакторить и отлаживать, если уж таки пришлось? Да как и любой другой legacy код.Рекомендую «Working Effectively with Legacy Code» Michael Feather.Seam model, описанная в книге, вполне применима и для каши с темплейтами.Более-менее ровные шпагетти — конечно даються проще. Разве вы не замечали: чем посредственнее программист тем ровнее шпагетти? Не подменяйте проблему... Программист хочет стать лучше, он читает умные книжки, он скорее всего тащит это в код из лучших побуждений...А вот здоровая корпоративная культура которая бы направляла его в нужное русло — отсутсвует... Конечно же легко закрыть на это глаза, во всём обвинить, например, бедного Александреску (он наверное сам в шоке от того как его идеи применяют). Короче, лечите болезнь — создавайте культуру, оставьте в покое симптомы:) А шпагетти народ закручивает не только по рецепту Александреску, но и ещё тысячей других способов. И не глядя на конкретный код я не могу сказать какие из них заведомо проще распутывать: спагетти статических но, всё-таки детерминированных темплейтов или же спагетти из недерминированного рантайм-полиморфизма в псевдо-ООП стиле.

Еще один момент — темплейты в С++ это гнездовье хорошо замаскированных эксепшенов. А это в ряде случаев нежелательно.

Почти любая разновидность абстракции по совместительству гнездовье замаскированных ошибок. Однако было бы ещё большей ошибкой, если бы кто-нибудь сделал из этого вывод, что если вы хотите избежать замаскированных ошибок — абстракции нельзя применять вообще.Ну и, естественно, я не предлагаю никому использовать С++ Template Metaprogramming (да же не смотря на то что работает) — это один из самых неудачных, но при этом распространённых примеров метапрограммирования.

2 xhalt

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

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

Кстати, здоровая корпоративная культура программирования, если она есть, не позволит в общий рот класть всякий непотреб.Peer-to-peer code reviews + хорошо продуманные coding conventions могут сделать очень многое.Такую культуру сложно привить организации, но если получиться — новому человеку просто будет стыдно коммитить код если он будет не понятен команде или будет недостаточно качественнен...К тому же эффект № 1 от p2p code reviews — это непрерывное обучение путём обмена опытом.В крайности, конечно тоже впадать вредно, ибо можно благими намерениями всё испортить: Например в одной конторе в Киеве с некоторого времени запрещено создавать С++ темплейты. Прям в C++ кодинг конвеншнах. Вместо работы над устранением причин болезни — поработали над устраненем симптомов. Ну и, как по мне, спагетти-код он не становиться более качественным спагетти-кодом, если из него поубирать все угловые скобки...

2 Kostiantyn

прям как дети: -D

с детьми проще — они всё в свой рот тащат, а не в общий :)

тащить в код всё что видит

прям как дети: -D

Да ладно, что вы уж в самом деле! Проблема ж, очевидно, ведь не в самом факте чтения книг Александреску:) Не разумея смысла и ограничений незрелый ум имеет тенденцию тащить в код всё что видит :)

2COTOHA

что значит «не стоит»?

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

2 dalv

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

вы разве не прочитали, что std: algorythm это namespace? с ООП надо (как и со всем) без фанатизма., но для студентов — имхо — в обязательном порядке. почему я уже объяснял выше.

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

что значит «не стоит»? они без него не могут — препроцессор всё-таки... вот, например, пример DLS: http://habrahabr.ru/blogs/craz.../ метапрограммирование в чистом виде:) не знаю только, насколько оно повышает производительность в данном конкретном случае:)

dalv: Вы, кажется, меня не правильно поняли. Я вовсе не возражал вашему постингу, и std: algorithm мне как раз нравиться, как и STL, я же совсем о другом:)

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

:) Ну я уверен на 100%, что лично Вы не уподобляетесь многим моих знакомых плюсовикам (всё-таки язык не поворачиваться крестами это дело называть;)) которые ставят знак равенства между метапрограммированием и С++ Template Metaprogramming.Я отношусь к С++ Template Metaprogramming — как типичному примеру one-step heterogeneous metaprogramming с очень ограниченными возможностями, и с особой отличительной характеристикой: оно сильно переусложнёно во всех отношениях, особенно в синтаксисе и семантике мета-языка. Хотя для такого языка как С++, это значительно лучше чем ничего, и в конце концов, именно это позволило сделать Степанову STL (и кстати, в основном, для этого изначально и задумывалось;)).

Помоему в СТЛ вменяемо сосуществует ОО и процедурный подход и превращать это в маразм «царства существительных» не стоит

+1

[updated]

dalv: Так и запишем: Степанов не асилил книжку «для чайников» и поэтому неправельно провел анализ предметной области.

К слову, Степанов, имеет небольшие... эээ... сложности с анализом предметной областиВот здесь: http://www.stepanovpapers.com/..."If I were using top-down design to design an airplane, I would quickly decompose it into three significant parts: the lifting device, the landing device and the horizontal motion device. Then I would assign three different teams to work on these devices. I doubt that the device would ever fly."Это он типа аргументы приводит против top-down design. Я могу сделать лишь единственный осмысленный вывод из цитаты: самолёты проектировать Степанову — противопоказано:) Из этого же материала: "...And since I am strongly convinced that the purpose of the programming language is to present an abstraction of an underlying hardware C++ is my only choice."Сравните это с цитатой из SICP: "First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute."Почти противоположное по смыслу утверждение! Степанов пытается сказать в своих notes, что последний подход несовместим с эффективной работой с hardware и т.п.Хотя сегодня же, для всё большего и большего кол-ва профессионалов, становиться понятно, что это является огромным заблуждением... (отдельным же личностям это было понятно ещё в 60-х, задолго, до появления С++;)) STL не без своих тараканов, но в целом — это замечательный и очень качественный продукт. Поэтому я не Считаю заблуждения Степанова фатальными, и всё жду с нетерпением, когда же он, наконец, откроет для себя программируемый язык программирования:) Это было бы неплохо, так как он является авторитетом для огромной аудитории...

2xhalt: перевод, если найдется время и желание высылайте на editors@developers.org.ua для публикации на ДОУ.

2xhaltСпасибо, что нашел время прокомментировать: -)

dalv: Так Вы имя не раскрывайте, а просто скажите где у нас таким занимаются? Или он фрилансер?

Kostiantyn: Давайте сделаем так, я с ним свяжусь, и если он заинтересуется...

Здрасьте, товарищи! Тайны из моей скромной персоны никто не делает: меня зовут Владимир, работал я 10 лет в Украинской компании ТМСофт, а с недавнего времени я в Microsoft Ireland Research.

Kostiantyn: я хочу быть таким же крутым спецом и зарабатывать столько же бабла

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

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

Ну я более чем уверен, что это не так, ибо я сомневаюсь что найдётся человек который в трезвом уме пошёл бы искоренять техники метапрограммирования и метаязыковой абстракции, которые работают эффективно во всех отношениях. Чего просто нельзя не заметить. К тому же, как выяснилось, этому очень легко обучать. Это было сюрпризом и для меня, и кстати именно это и послужило началом цикла статей, в которых я пытаюсь донести мысль, о том что метапрограммирование — это вовсе не только для гуру, и собтсвенно показать практическую сторону. Если считаете что это было бы хорошим материалом для ДОУ, могу поднапрячься и сделать авторский перевод на русский...Стоит ли себе морочить голову и пытаться заниматься «решением судоку» в промышленном масштабе? Да, если вы чётко видите, что это позволит вам быстрее достигнуть ваши цели (вставьте сюда что хотите: сдать проект вовремя, получить больше денег и т.п.), причём открою секрет — место работы для этого менять не обязательно. Если не видите, значит оно вам пока не надо — подождите лет 5, когда это полным ходом войдёт в мейнстрим, точно также как вошли не так давно, например, Java и С#... В этом смысле Kostiantyn прав, изучение таких вещей как SICP вполне себе носит вполне себе меркантильный характер:) Прямо сейчас это даёт возможность людям с богатым опытом програмирования значительно повысить свою эффективность (что ещё как востребовано сегодня на рынке), а новичкам у которых в голове с извилинами всё в порядке позволит во многих случаях давать фору С+±никам с бородой, мнящим из себя мегагуру, но наотрез отказывающихся видеть что-либо другое кроме своего C++ и всея-ООП (язык и парадигму заменить по вкусу).P.S. А против С++ ничего не имею — долгое время это был мой любимый язык, и я, как и многие другие, считал ООП единственно правильной парадигмой.

2eugene_n, что государство у нас не идеальное — это я знаю. Но государство не появляется из вакуума. Какие люди, такая и страна. Так что людей нужно менять, разруху в головах ликвидировать. А что государство отдельно, люди отдельно — так уж повелось с 91го. И иногда мне кажется, что слава Богу, а то наши керманычи такого бы наворотили...

2COTOHA Свяжусь, думаю что он не будет против использования статей. Более того, думаю, что он будет только «за». Русскоязычный вариант у него вряд ли есть, подозреваю, что он сразу на английском писал.

первая запись очень красиво легла бы на ДОУ. если бы кто перевёл. Сергей, у вас есть редактор-переводчик? Или просто свяжитесь с этим человеком — может у него есть на русском...

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

2 Kostiantyn

Кстати вот нарыл ссылку на блог этого чела.http://xhalt.blogspot.com/

первая запись очень красиво легла бы на ДОУ. если бы кто перевёл. Сергей, у вас есть редактор-переводчик? Или просто свяжитесь с этим человеком — может у него есть на русском...

Записей мало правда: — (Удивительно, но когда жизнь насыщена вести глоги времени нет. Проверено.

это точно:)

Занимался, занимался. Думаете чего я в соседней теме так возмущался неинтересными проектами. В том числе и потому, что знаю людей которые занимаются интересными вещами.Кстати вот нарыл ссылку на блог этого чела.http://xhalt.blogspot.com/Записей мало правда: — (Удивительно, но когда жизнь насыщена вести блоги времени нет. Проверено.

а:) я кажется понял... про метапрограммирование я не то чтобы прогнал, но выразился не правильно. связано это с тем, что я просто не могу поверить, что действительно кто-то им занимается (занимался?) в Украине не в качестве экспериментов, а в производстве. То есть это было не разовое применение, а каким-то макаром человек умудрялся метапрограммировать то, что сейчас пользуется спросом — сайты, формочки и т.д. или очень повезло с заказом:)

2COTOHA: видимо это это: http://ru.wikibooks.org/wiki/L...2Kostiantyn: думаю все будет зависеть от глубины кризиса.

2 Сергей ВолошинТогда уж не знание 2−3х паттернов, а знание названий 2−3x паттернов. Потому что знание — означает всеобъемлющее понимание предмета, а этого как раз и нет.

2 dalv

В фортунки!

выражовывайтесь яснее:)

2dalv

верхом крутизны девелопера считается знания 2−3х паттернов и умения написать тестик

Возможно это станет (стает, стало) еще одним пузырем, судьба которого — лопнуть.

2dalvРаботал он в небольшой киевской компании сениор манагером, ну и всякие такие штуки проталкивал, что удивительно — успешно. Но боюсь, что уже не занимаются, у меня очень большие опасения, что с его уходом в той конторе вернутся к более привычным способам разработки софта.Давайте сделаем так, я с ним свяжусь, и если он заинтересуется, то сам все прямо здесь и расскажет.

2davlАга, в Украине, и как я понял очень успешно. Раскрывать его имя и т.п. я не буду, если бы он хотел, он бы уже сюда написал бы. Кроме того, он некоторое время покинул Украину ради одного крайне выгодного предложения. И похоже вовремя.Updated 2 COTOHA: Нет, у него таржет платформой был MSIL (ну т.е...NET)

2 Kostiantyn

На самом деле человек, который мне порекомендовал прочесть SICP, применяет Scheme промышленно в качестве языка метапрограммирования.

ого-го! в Украине?, а метапрограммирование это в смысле Схема используется как эмбеддед язык поверх ява-приложения?

2COTOHAНа самом деле человек, который мне порекомендовал прочесть SICP, применяет Scheme промышленно в качестве языка метапрограммирования. И причина изучения у меня меркантильная — я хочу быть таким же крутым спецом и зарабатывать столько же бабла.Впрочем, Вы правы SICP — это удел энтузиастов. К сожалению.

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

2 dalv

Ого. Сегодня просто день откровений. То, что по СИКПу учат во всех топовых американских вузах на CS-специальностях это так, мелочь...

суть-чуть подумав, вы сами согласитесь, что таки да — мелочь. Вы же сами уже видите, что ваше знание ФП взагали и СИКП’а в частности не востребовано на рынке труда Украины. Поэтому я и говорю — энтузиасты. Вот Константин не даст соврать — он же СИКПом интересуется сам по себе, а не по рабочей надобности.

Там нет разделов про паттерны и юнит-тесты:)

Ну тогда пожалуйста не забывайте дружно ныть что на этом сайте все статьи о фреймворках или зарплатах.Сами же написали:

Учить нужно фундаментальные вещи.

Но не помогаете:) Напишите что-то интересное об этих фундаментальных вещах, судя по комментариям, только rocket science всех и интересует, но дальше комментов дело не идет.

2dalvПосмотрите 82. Это и есть «ссылка», в данном случае, на R5RS (Revised 5 Report on the Algorithmic Language Scheme). А если вам нужна гиперссылка, то вотhttp://www.schemers.org/Docume...Нет, вы проводите тренинг (это тренинг?) бесплатно, более того, добровольно: -D, более того, не для тим лида или ПМ, а для простого разработчика (меня), более того, не только для меня, а для всех, кто может прочитать это обсуждение на этом сайте.

2 Сергей Волошин

но если СИКП не очень популярен у тех кто хочет стать хорошим программистом

это очень-очень мягко сказано.:), но оно по-большому счёту мало кому надо. это как судоку и японский кроссворды для обывателя — вроде мозг тренирует, но реальную пользу заметить сложно. именно поэтому решают задачки только энтузиасты.2 dalv

может стоит его немного порекламировать, сделать обзорчик, кому оно надо и поможет, а кому не надо и не стоит, какие-то рекомендации и дополнительную литературу, описать свой путь в осиливании...

а вот это было в любом случае полезно. может сайт читают и те из энтузиастов, которые не знают куда энтузиазм направить:) В самом деле, dalv, напишите, но естественно не только про SICP, а про разные интересные книжки и задачи и что там ещё помогает мозгу не ржаветь.

Anton NaumovНу насчет тренингов не обещаю — идея носится в воздухе, но пока ничего конкретного.Насчет проблем со студентами.Безусловно тут стопроцентно проявляется невыполнение государством своих функций.Первое — это школа. Унизительные условия труда учителей оставили там людей большей частью равнодушных и некомпетентных (хотя есть настоящие святые подвижники).В результате на мало-мальскую грамотность сотрудника можно рассчитывать только после института.Номер два. Разрыв между обучением и потребностями бизнеса. И при Советах, и в развитых странах отдельные кафедры и факультеты спонсируются и курируются крупными фирмами. Оборудование, чтение спецкурсов, практика, отбор выпускников — все это в порядке вещей. К сожалению существующие ВУЗы не способны взаимодействовать с бизнесом, а тренинг-центрам Глобал Лоджика и СофтСерва никогда не дадут государственную аккредитацию даже на уровне ПТУ. Вот так и живем — граждане и бизнес в одной реальности, а их слуги в другой.

2dalv: я не знаю, нельзя так нельзя, но если СИКП не очень популярен у тех кто хочет стать хорошим программистом, может стоит его немного порекламировать, сделать обзорчик, кому оно надо и поможет, а кому не надо и не стоит, какие-то рекомендации и дополнительную литературу, описать свой путь в осиливании... Но если нет так нет: (

2Сергей ВолошинНе, я пас. Во первых у меня по Схеме дикие пробелы, как видите. А во вторых на столе лежат записки по двум дотнетовским тематикам, которые я никак не найду время до ума (а точнее до стадии статьи) довести.

2dalv, хотел бы я ответить «Да, отправил бы в армию! », или еще больше — «Нет, у меня не может вырости лоботряс»., а на самом деле не знаю. У меня еще нет того, кто может вообще в кого-то вырости. Доживем, там посмотрим. Я не знаю. И родителей как-раз хорошо понимаю, ну, а государство... Я уже говорил, госдуарство — это я, Вы, каждый из нас. Это не государство такое — это люди такие, причем если мы и исключение, то не большое и далеко не во всем. Хотя может быть Вы — во всем, я не знаю. Проблема ВУЗов, и проблема ровных дорог суть одна и таже — люди приходят на работу получать деньги, а не делать свое дело максимально хорошо. И это проблема. И это тоже удручает. Потому что если бы преподаватель хотел учить (не получать зарплату, не брать взятки, не дорабатывать до пенсии, не готовиться в политику, не самоутверждаться властию данной ему, не самоутверждаться образованностью своей перед первокурсниками и т.п.), то никакие контрактники не могли бы ему в этом помешать. И есть такие которые хотят, и которые учат, и к которым самые отъявленные «контрактники» ходят на лекции и записывают, есть — у меня был такой преподаватель, Елена Григорьевна Качко (личность в ХИРЭ легендарная). Но ведь большинство... И так в любой области. Или нет?

А может кто-то из присутствующих напишет статью о SICP? на сайте уже было несколько упоминаний: http://www.developers.org.ua/a.../но статьи еще не было.

2dalvАй-ай-ай, ну т.е. Вы все правильно написали, но это не обоснование. Моя ссылка на стандарт — обоснование... да...: -D

2davlА ведь правда Ваша, нашел в стандарте

Arguments to Scheme procedures are always passed by value, which means that the actual argument expressions are evaluated before the procedure gains control, whether the procedure needs the result of the evaluation or not. ML, C, and APL are three other languages that always pass arguments by value. This is distinct from the lazy-evaluation semantics of Haskell, or the call-by-name semantics of Algol 60, where an argument expression is not evaluated unless its value is needed by the procedure.

Сейчас вспомнил, что на эту тему в SICP упражнение было — с реализацией условного оператора, который приводил к зависанию интерпретатора

dalvСпасибо, что поправили, я похоже поспешил с выводами про ленивость Scheme. Но честно говоря, «мужики то и не знают», что Scheme относится к strict applicative order. Обоснуйте это утверждение, плиз. Потому что насколько я помню, для Scheme стратегия явным образом не определена.

2eugene_n, буду премного благодарен. Если внутрении тренинги станут открытыми, с удовольствием прийду послушать-поспорить. Статью же буду ждать с нетерпением. Всегда мне нравится, когда люди делятся опытом, вдвойне приятно, если я еще и не знал того, о чем рассказывают.И по поводу уровня, к каждому человеку должен быть подход на том уровне, на котором он способен понять излагаемый материал. Это я Вам по собственному опыту говорю. Одна из глобальных ошибок преподавания — уравниловка. По итогу получаем либо не понятную лабуду расчитанную на гениев, либо — прописные истины, которые известны всем, кроме идиотов. Может показаться, что эта статья именно из второго скоупа. Но это не так, потому что она расчитана примерно на средний уровень современного студенчества. Причем не зависимо от курса — на первом все примерно такие, на пятом — все оставшиеся. Опять-таки лекция, как я понимаю, первая и ознакомительная. Ее я бы тоже делал максимально простой, чтобы установить контакт с аудиторией и послушать фидбэк. Потом можно начинать вытягивать студентов на взрослый уровень, но тут тоже нужно мэдлэнно и аккуратно, иначе сорвутся.p.s. Что действительно удручает, так это средний уровень украинского студенчества. Но увы, такова жизнь.

2dalvСхема по сути своей ленива. Шарп по сути своей — нет. Отсюда и берется такое дикое количество оверхеда. Удовлетворительного решения я пока так и не нашел.Настолько низкоуровневых примивов в LINQ нет.За рекомендацию спасибо, обязательно все перерешаю; -), но время, время!!! Я потому и закинул пример на rsdn, что это обычно позволяет 1) сэкономить время 2) получить знания в ходе обсуждения темы на форуме. Прошу прощение за отступление, но я вообще тугодум по своей природе, всмысле блиц решения мне не посилам часто. Зато умею анализировать чужой опыт. Только тем и живу, что в длительной перспективе, мое тугодумство перекрывается качеством моих решений: -D

2 Anton Naumov Понимаете Антон, в творчестве СОТОНЫ удручает одна деталь — он не тянет студента на уровень взрослого, а опускается до уровня студента. Хотя студент тоже разный бывает — dalv, если не ошибаюсь, только на защиту выходит.Впрочем, мы тут у себя собираемся делать серию внутренних тренингов.Если будут интересные находки — обязательно поделюсь.

Джентельмены, а Вы пробовали читать лекции? Не обязательно в институтах, вообще — у себя в конторе, в другой конторе? Вот так чтобы тема была заявлена, чтобы аудитория была больше 3 человек? Мне интесны в первую очередь ответы критиков.2eugene_n, скажите, Евгений, Вы никогда не были студентом? И еще, Вы всегда знали то, что знаете сейчас? Я к тому, что очень хорошо быть богатым и здоровым, и совсем уж плохо — бедным и больным, но в жизни случается всякое. И ИМХО, со студентами тоже можно и нужно работать. Я практически уверен, что когда Вы будете читать лекцию для сутдентов, то уж она-то будет лишена недостатоков вообще. А когда Вы напишете статью для ДОУ, то она будет расчитана исключительно на сеньйорскую аудиторию. Осталось только дождаться того светлого дня, когда это произойдет.

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

Необычно резкая критика, хотя суть в целом верная. Я бы еще добавил — надо знать имена — классиков и современников. Кнута, например, для всех; Круга для веб-разработчиков и тд.

>> P.S. Кстати, пожалуйста не называйте С-шарп «диезом».В «Соло на клавиатуре» есть такая фича, что когда занятие проходишь — читаешь страницу с анекдотами. Типа, стимул такой. Так вот в 6-й версии был анекдот: "Да, ты даже Си плюс плюс от Си-диез не отличишь! "До появления C# он был смешным:))

2dalvВот тут получилось обсуждение по поводу cons на шарпе.http://www.rsdn.ru/Forum/messa...P.S. Кстати, пожалуйста не называйте С-шарп «диезом». Это все равно что в викторианскую эпоху назвать куриное бедрышко бедрышком, надо говорить «верхняя часть заднего крылышка»::) Ну т.е. «шарп» — так в стандарте прописано: -)

это ж именно что конспект. бумажку эту можно причитать минут за 10−20, а лекция была полтора часа. и мнится мне, что я и примеры приводил валидные, и причины объяснял. вот. ну основное — я не надеялся всех и сразу переучить. было 2 цели: — уверить тех, кто старается ошибок не делать, в том, что они на правильном пути; — показать остальным, что то, что они делают — ошибки, а не норма. дальше те, кто проникся могут задавать вопросы, читать книги, гуглить и прочее.

Нет примеров в разделе про парадигмы. да и почти все детские ошибкиописаны шаблоном «Х — это плохо» (просто плохо. потому что нельзя). «хорошо, что хоть преподаватели борятся за комментарии». Ну и что? Ну и почему? И что начнут читать да гуглить студенты? Троелсена, который упомянут в комментариях? Для чего эта статья? Если помочь студентам и чайникам — то надо давать конкретные названия книг или тем. Не знаю какая сейчас ситуация на рускобумажном рынке, несколько лет назад в книжных магазинах тон задавали дословно переведенные хелпы и мануалы от издательства BHV.Итого: чайникам не поможет, на ДОУ публиковать вырезку и ссылаться на «не понятно — надо было на лекции сидеть» тож пользы ноль.Проблему описали актуальную, без этого у Украинского аутсорса преимущество перед Индией с Пакистаном так и останется лишь в «культурной близости к западу» и «меньшей часовой разнице с ЕС».Но тема не раскрыта. Чего б не упомянуть, что есть DRY, какието паттерны, юнит-тесты? Показывайте пути к светлому будущему, а не просто убивайте у молодняка энтузиазм словами «все что вы делаете сейчас — не правильно, никуда не годится и при устройстве на работу вам никак не поможет». А то еще перейдут на 1С, там ведь комментарии не надо — while/if по-русски. документация вся «по-нашему»:)

2 Андрей Церкус

2СОТОНАда, мысль донесена отлично!:) Матерому, естественно, надо было сказать именно это — что лаба — это микропроект, там все по-другому, а видя будущее этого проекта явно будут проблемы

ну, матёрый просто дар речи потерял:)

2СОТОНАда, мысль донесена отлично!:) Матерому, естественно, надо было сказать именно это — что лаба — это микропроект, там все по-другому, а видя будущее этого проекта явно будут проблемы

2 Андрей Церкус

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

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

2 zwitter

кстати, автор статьи действительно считает, что Form1.Condition — глобальная переменная?

а больше придраться не к чему?:) могу показать кусок кода, где она используется как глобальная переменная для передачи состояния между тремя формами.

2 pako

постоянно твердят «так низзя!!! »., но для статьи этого мало — объяснить почему так плохо или показать как правильно на практическом примере.без этого всякие абстрактные «неправильно спроектировали» звучат как «можно, но по уставу не положено», и польза этих запретов нулевая.надеюсь харьковские студенты почерпнули больше, чем я.

я тоже надеюсь:) на самом деле это ж именно что конспект. бумажку эту можно причитать минут за 10−20, а лекция была полтора часа. и мнится мне, что я и примеры приводил валидные, и причины объяснял. вот. ну основное — я не надеялся всех и сразу переучить. было 2 цели: — уверить тех, кто старается ошибок не делать, в том, что они на правильном пути; — показать остальным, что то, что они делают — ошибки, а не норма. дальше те, кто проникся могут задавать вопросы, читать книги, гуглить и прочее.

2Андрей Церкус: ну тут у нас же только конспект лекции, к которой нужно по хорошему сделать несколько семинаров — практических занятий, с примерами — как правильно и как неправильно и домашними заданиями с последующим анализом етс. Не знаю правда как это было на самом деле. Я тоже против объяснений типа «так надо», «я так сказал» и т п.

2Сергей ВолошинЯ чуть несогласен с вами. Начинающему программисту надо рассказать причину, почему так и в каких случаях это не выполняется. Программист — это профессия, где надо знать причины, а не только следствие.Ну и настоящий (пусть даже начинающий) программист это поймет и приобретет знание глубины вопроса. А ненастоящих учи не учи — толка не будет.

кстати, автор статьи действительно считает, что Form1.Condition — глобальная переменная?

Использование «глобальных переменных». Особенно в виде «Form1.condition». Это снижает читабельность кода и является симптомом того, что вы неправильно спроектировали приложение.Использование статических методов, для решения бизнес-задачи.

постоянно твердят «так низзя!!! »., но для статьи этого мало — объяснить почему так плохо или показать как правильно на практическом примере.без этого всякие абстрактные «неправильно спроектировали» звучат как «можно, но по уставу не положено», и польза этих запретов нулевая.надеюсь харьковские студенты почерпнули больше, чем я.

2 ks

Думается уместно переобозвать статью и обозвать — «Как нужно жить. Для Чайников.», или «Инструкция жизни: -) Для чайников.» — обобщив каждый пункт материала:)

«детские ошибки» не обобщаются, имхо

2Андрей Церкус: мне кажется, что к этому в принципе можно отнестись также как и к обязательному помещению блоков в {} (в C-подобных языках). Просто если начинающего программиста попросить следовать каким-то правилам и при этом сказать что это только пожелание и правила действуют не всегда, а почти всегда, то почти всегда разработчик будет делать как ему проще и как он привык, а если таких правил не соблюдается не 1 и не 2 то это может обернуться чем-то нехорошим.

если бы то, что в теле вашей onClick была отдельная функция (с комментариями к тому же и именем читабельным), было бы почти всегда удобнее.

Да, это понятное дело:) я потому и говорил — что дело не категоричное, а "почти всегда«Если в проекте 100 обработчиков событий и другими методами эта бизнес логика не расширяется, то как-то некрасиво расширить список методов объекта до 200 просто потому, что так принято «почти всегда»

2Андрей Церкус: я думаю так

Что касается JS, то там такой принцип построения обработчиков связан именно с тем, что jQuery (и другие фреймворки) по умолчанию рекомендуют не использовать ООП в полную силу, а навешивают анонимные функции в качестве обработчиков.

Мне кажется что не писать все в «onClick» — относится не только к ООП.Просто если это действие, которое в onClick будет происходить не только по этому клику (например клику по кнопке), но и по клику по меню, тулбару, хоткею етс, то работать с текстом программы станет не так удобно. А если бы то, что в теле вашей onClick была отдельная функция (с комментариями к тому же и именем читабельным), было бы почти всегда удобнее.

Хорошо, «без фанатизма» мне понятно — действовать по ситуации;) Есть просто много мелких программ-проектов, которые никогда не будут расширяться или изменяться. Так вот для них мне кажется ненужным дублировать обработчики событий такими же методами.Что касается JS, то там такой принцип построения обработчиков связан именно с тем, что jQuery (и другие фреймворки) по умолчанию рекомендуют не использовать ООП в полную силу, а навешивают анонимные функции в качестве обработчиков.Еще коллеги, выскажитесь, является ли бизнес-логикой в событиях вызов штуки 4−10 методов объекта для реакции.~примерно такое, без деталей—function onClick () { values = this.fetchValues (); calced = this.calculateSmth (values); this.saveInReport (’entered ’ + values + ’, calculated: ’ + calced); newValues = this.transmitToServer (calced); this.redraw (newValues); } —Я, лично, думаю, что такие штуки тоже лучше выносить в отдельную функцию, но с учетом размера проекта, будет ли он продолжен, а также специфического синтаксиса языка программирования.

Поставил 5 — мне понравилось...Думается уместно переобозвать статью и обозвать — «Как нужно жить. Для Чайников.», или «Инструкция жизни: -) Для чайников.» — обобщив каждый пункт материала:)

Можно поинтересоваться как Вы например реализовали в нем ленивые списки из главы о Streams?

В С# начиная с 2.0 есть конструкция yield return

коменты не читал, ибо представляю, шо тама могут написати. Но если представить себя не месте 17-летнего баклана, который все это слуашет в аудитории... то лекции зачем и +5.

2dalvРеально жесть. Есть операции объединения последовательностей (при этом получается одна общая последовательность). Операции создания пары нет. Гугл говорит, что народ таким вопросом уже задавался, но решения там я не нашел. Ппосреди ночи лезет в голову всякая чушь. Попробую завтра: -)

2Александр Я не знаю, какой универ вы заканчивали, но паскаль на 2 м или на 3 м курсе уже не испльзуют. B вашем коде есть избыточность =).Я думаю, что перед тем как спрашивать про API, ООП и прочее, на собеседовании, может стоит спросить, кто такие Дональд Кнут, Никлаус Вирт и чем они знамениты. Университет не учит, а дает знания. С каждым годом, программа урезалась и большая часть вещей давалась студенту на самоизучение, но университет закладывал фундамент, для дальнейшего саморазвития студента. Я не думаю, что преподователь не сможет ответить на вопросы, если они есть у студента. Начсет оформления кода, когда читаешь книгу по одному из языков программирования (не ASM), то заметно, что там автор придерживается некоторого стиля. Можно задаться вопросом: почему так? Мне кажется, что некоторые моменты из the книги не ко всем направлениям в программировании подходят

2davlЯ как раз к этой главе в плане прочесть подобрался. По поводу ленивых списков — в.NET для этого есть LINQ. Говорят, ленивый шо капец.

2eugene_nВирт, да... его «Алгоритмы + Структуры данных» до сих пор актуальны, не смотря даже на приход ООП, возрождение ФП и почти полное вытеснение процедурного подхода.

2dalvУзнал о нем полгода назад (аж стыдно). На данный момент прочел где-то до половины, примеров сделал где-то треть. Идет очень трудно — приходится совмещать с критичным для текущих задач обучением. Но восторг от каждой страницы и примера просто щенячий. Как только появляется свободный час, возвращаюсь к прочтению.Первые задачки решал используя drScheme, потом пересел на С#, благо достаточный инструментарий ФП в.NET 3.5 уже тоже есть.

2Сергей Волошин

хотя и доказывать своё какое-то превосходство (анонимно, хм) более приятно.

Да не превосходство, а досаду, что заочно уважаемая копания оказалась очердным тривиальным студенчесим свитшопопом: (

родилась идея для серии статей: бесформенное программирование

Смеятся после слова «лопата»?

Кстати вот и ответ на вопрос «почему мы такие аутисты»:)

не понял шутку юмора. в чём ответ-то?

Потому что предыдущая статья была написана на ту же аудиторию «логика-в-контроле», а мы все сдуру начали примерять это на себя.2 COTOHA

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

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

Малевание формочек имеет к программированию такое же отношение, как тасование видеокарт — к ремонту компьютеров. И к нам такие говноляпы не придут — хотя бы потому, что завалят на интервью подсчет битов и написание мьютекса. А я садист — могу еще и адресную арифметику подкинуть:) Вообще единственное, что стоит сказать молодянку — это выкинуть «С-Шарп за 21 день» и почитать че-нибудь вечного: Кернигана-Ричи, Вирта, Кнута, ГоФ, того же Голуба в конце-концов.2 Александр Буквально час назад за пивом обсуждали наш молодняк. 2/3 пришли из академии «Шаг», 1/3 электрики, электронщики, физики, химики итп. выучившиеся самостоятельно (матан сдал? годен). Выпускники профильных факультетов на интервью начинают плыть уже на ключевых словах. С какими нафиг университетами взаимодействовать??? Софтсерв, ГлобалЛоджик и другие берут себе людей с улицы и готовят как им нужно (на тоже рисование форм) и правильно делают.

2zwriterНевнимание к деталям — не ошибка, а неряшливость? Оригинальное у вас Дао: -) 2dalvНу хотя бы SICP читать студентам надо в обязательном порядке. А про фаулеров, беков и иже с ними хотя бы рассказать, что такие есть и что они полезного понаписали

вот это уже очень интересно. что именно противоречит здравому смыслу? мне важно знать ответ, т.к. лекция-то не последняя — надо исправляться.

Одна из целей публикации этой статьи на ДОУ было не сколько научить начинающих разработчиков, но и научить (опытных разработчиков) учить начинающих разработчиков.

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

Многие комментаторы этой статьи наверное находят адекватных (по их мнению) разработчиков в зеркале и этого им достаточно.

В статье описаны не «ошибки» программы, а то что можно, скорее всего, назвать «программным этикетом».

Дополнение к Этике программирования Егора Егорова для студентов:)

  1. В статье описаны не «ошибки» программы, а то что можно, скорее всего, назвать «программным этикетом». Это как с обычным этикетом, можно со стола хватать все руками, а можно взять вилку, а где-то необходимо пользоваться набором из 12 вилок ложек и ножей, причём знать к какому блюду какой прибор использовать. Нет, насытится (поесть) можно любым способом, но в каждом из сообществ принят свой этикет — правила, скажем, оформления программ.Для того чтобы подчеркнуть мысль приведу свой студенческий код второго или третьего курса:

    procedure compvote(var graph:derevo);vari,j:word;begingraph.timer:=graph.timer+1;{sending}{first uarus}for i:=1 to 2 doif (graph.Work_P[1,1]=0) and (graph.Work_P[2,i]=0)and (graph.I_P[2,i].Time0) and (graph.Free_P[1,1]=0)thenbegingraph.I_P[1,1]:=graph.I_P[2,i];graph.Free_p[1,1]:=1;graph.Free_p[2,i]:=1;clearproc(graph,2,i);end;{second yarus}J:=0;repeatfor i:=1 to 2 doif (graph.Work_P[2,1+j]=0) and (graph.Work_P[3,i+j]=0)and (graph.I_P[3,i+j].Time0) and (graph.Free_P[2,1+j]=0)thenbegingraph.I_P[2,1+j]:=graph.I_P[3,i+j];graph.Free_p[2,1+j]:=1;graph.Free_p[3,i+j]:=1;clearproc(graph,3,i+j);end;J:=J+2;until j>2;{third yarus}J:=0;repeatfor i:=1 to 2 doif (graph.Work_P[3,1+j]=0) and (graph.Work_P[4,i+j]=0)and (graph.I_P[4,i+j].Time0) and (graph.Free_P[3,1+j]=0)thenbegingraph.I_P[3,1+j]:=graph.I_P[4,i+j];graph.Free_p[3,1+j]:=1;graph.Free_p[4,i+j]:=1;clearproc(graph,4,i+j);end;J:=J+2;until j>6;...
    Код ужасен, но он работает, причём отлично работает и приложение становилось демонстрационным в институте «КАК НУЖНО ПИСАТЬ ПРОГРАММЫ». Как вы думаете, увидев такой код, студент сможет писать программы с учётом того что их будут читать другие? Что имеем в результате — выпускники имея кучу теоретических сведений, но не имея практических (например, в своих программах на Delphi использовал свой вариант критической секции через XCHG, так как не знал API для её стандартного использования) приходят на работу с ненужным количеством амбиций, что они типа все знают, в результате их жестоко опускают в реальный мир настоящие специалисты, которые теорию совмещают с практикой. И что мы имеем — студент после 5 лет траты денег, причём ваших денег, налогов, которые вы платите, идёт в Фокстрот и становится консультантом по ноутбукам и мобильным телефонам (тоже конечно нужная специальность, но не ценой траты многих тысяч государственных — ваших долларов на обучение).После этого появляются статьи что киевские программисты зажрались, про виртуальный кадровый голод. Кто виноват в кадровом голоде — государственные университеты, студенты или все таки современные IT-кампании. Ну студенты вроде бы не виноваты в этом, они часто честно учатся, сдают экзамены, курсовые и лабораторные и не их вина, что в университете их не научили выпускать готовый продукт. Университеты тоже вроде бы не виноваты — они используют проверенную многими летами программу по которой училось большинство тех специалистов которые сейчас сидят на должностях IT-директоров, ПМ-ов и архитекторов. Так что проблем у системы образования нет. Можно конечно попинать IT-кампании, но они тоже вроде бы не виноваты в том, что «типа специалист» выход с которого даже отрицателен для кампании хочет за обучение прикладным навыкам ещё достойную оплату.Вроде не виноват никто. Но основная проблема остаётся. С чем она связана — с тем что университеты выпускают не по западному образцу готового к употреблению рабочего, а архитектора без практических навыков, который он приобретал в классическом варианте трёхлетнего обучения работой «молодого специалиста». Сейчас этого нет. Я понимаю еще мелкие кампании-стартапа которые кадры могут завлечь высокой зарплатой и прочими ухищрениями, но что думают о кадровом вопросе крупные украинские IT-корпорации, почему они не заключают с университетами договор о трёхлетнем обучении работой специалиста по необходимой им специализации, почему не лоббируют свои интересы в той же ВР? Даже просто составить несколько небольших методичек по «интересующем технологиям», как система контроля версий, оформления кода, какого-то дизайна страниц на php или ASP.NET и БЕСПЛАТНО (да, это прежде всего нужно работодателям для решения кадрового вопроса) распространять среди студентов профильного IT-факультета. Да. Не все из них придут вашу кампанию, но вероятность что вам можно будет найти сразу толковых джуниоров возрастёт.PSВсем тем кто критикует данную статью, пожелаю всегда испытывать глобальные проблемы с поиском адекватных кадров, пока вы не поймёте свою ошибку.
2 Андрей Церкус:

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

Возможно в каком-нибудь скрипте на JavaScript так и будет:

$('#switcher-narrow').bind('click', function() {  $('body').addClass('narrow');});

а в целом это, как мне кажется, можно частично отнести к упомянутым в статье code conventions.

2 Сергей Волошин

А может программисты такие аутисты, потому что их легко зацепить или ранить?

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

А может программисты такие аутисты, потому что их легко зацепить или ранить? Грубостью, грамматикой/орфографией, ранить не угадав их мысли, или обидеть не поняв намёков? Программисты не любят прощать ошибок и давать второй шанс. Вспомнился анекдот:

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

2 Андрей Церкус

Товарищи, проясните вопрос с бизнес-логикой в обработчиках событий. Где-то видел еще упоминание, что этого лучше не делать (возможно, даже в антипаттернах). Но, если я знаю, что этот обработчик и эту логику никто никогда больше не будет использовать извне, то в каждом обработчике вызывать функцию, в которой просто нет приставки -on- для меня является бесполезной тратой компьютерного времени и разрастанием списка методов класса: ———-function onClick () {this.click (); } ———-Поясните, я думаю этот момент совсем не так категоричен, как написал автор.

если отвечать коротко, то «без фанатизма», а если долго, то что это за «бизнес-логика», которая завязана на click по кнопке?, а если добавят меню, что делать будем?, а если, не дай бог, надо будет принимать команды по RPC?

2 eugene_n

Кстати, до сегодня я рассматривал NIX как одно из возможных будущих мест работы, но после двух криатиффов от СОТОНЫ, списал его со счетов.

хм. ну и отлично... тех, кто с логикой не в ладах, нам не надо:)

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

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

Кстати вот и ответ на вопрос «почему мы такие аутисты»:)

не понял шутку юмора. в чём ответ-то?

2eugene_n

Просто хочеться надеяться тут девелоперс, а не стьюдентс орг юэй

статья имеет вполне определенную аудиторию, не обязательно зубрам девелопмента читать дальше 1го абзаца, лучше в сэкономленное (за счёт чтения) время написать небольшой продукт, стартап, статью или доказать теорему, хотя и доказывать своё какое-то превосходство (анонимно, хм) более приятно.

Кстати, до сегодня я рассматривал NIX как одно из возможных будущих мест работы, но после двух криатиффов от СОТОНЫ, списал его со счетов.

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

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

родилась идея для серии статей: бесформенное программирование:)

Товарищи, проясните вопрос с бизнес-логикой в обработчиках событий. Где-то видел еще упоминание, что этого лучше не делать (возможно, даже в антипаттернах). Но, если я знаю, что этот обработчик и эту логику никто никогда больше не будет использовать извне, то в каждом обработчике вызывать функцию, в которой просто нет приставки -on- для меня является бесполезной тратой компьютерного времени и разрастанием списка методов класса: —function onClick () { this.click (); } —Поясните, я думаю этот момент совсем не так категоричен, как написал автор.

Это что? Цензура от девелоперс или новые правила ведения блогов?

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

Полезная статья, скопировал себе в блог, линк из статьи не прибил, оставил по-честному. Почему-то люди просят удалить пост из блога. Это что? Цензура от девелоперс или новые правила ведения блогов?

2 Сергей Щетинин

Я за последние пять лет вроде прочитал ноль. Я то не студент, но всё равно критерий так себе. Если шесть програмерских книг в год глотать, когда учиться програмить? =)

ну... тебе пора писать по питону книгу:) так что извинительно. книги можно заменить на «статьи», «блоги» — вобщем я сужу по собеседованиям. Так вот студенты в большинстве НИЧЕГО не читают. потому и спросил... надеялся их пронять.

тут надо было бы спросить не имя автора, а просто «кто прочитал за последние полгода 1 книгу по специальности, а 2, а 3? »

Я за последние пять лет вроде прочитал ноль. Я то не студент, но всё равно критерий так себе. Если шесть програмерских книг в год глотать, когда учиться програмить? =)

А мне понравилось слово «тварьбы».

2 manuna

2zwitter: имхо, «путь» нерадивого «специалиста» == "ошибка в ДНК«©

изначально строчка «Стратегические ошибки — это ошибки стиля жизни» звучала как «Стратегические ошибки — это ошибки ДНК», но я исправил:)

2 Сергей Щетинин

Вроде как и надо. Только вот попробовал вспомнить какие сам читал и всплыло только пять названий типа «Основы Turbo Pascal 7.0», «Borland C++ какой-то там» да «Delphi 2.0 Unleashed» (допускаю что забыл еще несколько). Классной была только одна — по ассемблеру, автор российский еще Забыл Какзовут, кстати знания оттуда никогда на деле не применял. И доступа к инету не было, т.е. чтением онлайн не компенсировалось. А вот автора вообще ни одного, ни на какую технологию не назову. А есть знакомые с такими библиотеками, что мама-дорогая, а уровень увы нулевой, даже спустя годы.

согласен. тут надо было бы спросить не имя автора, а просто «кто прочитал за последние полгода 1 книгу по специальности, а 2, а 3? »

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

2zwitter: имхо, «путь» нерадивого «специалиста» == "ошибка в ДНК"©

2 zwitter :):) ну да — если человек планирует стать нерадивым специалистом, то это не ошибки, а успехи., но если он хочет стать хорошим, то это ошибки. нет?

причины типа «этой статье не место на ДОУ»? или что-то другое?

Другое. К орфографии претензий не имею и сам список для чайников в общем-то в каком-то приближении верный. Обсуждать минусы желания нет, так что обобщу как «мне не понравилось», извините.

скажите — книги по теме читать надо?

Вроде как и надо. Только вот попробовал вспомнить какие сам читал и всплыло только пять названий типа «Основы Turbo Pascal 7.0», «Borland C++ какой-то там» да «Delphi 2.0 Unleashed» (допускаю что забыл еще несколько). Классной была только одна — по ассемблеру, автор российский еще Забыл Какзовут, кстати знания оттуда никогда на деле не применял. И доступа к инету не было, т.е. чтением онлайн не компенсировалось. А вот автора вообще ни одного, ни на какую технологию не назову. Зато есть знакомые с такими библиотеками, что мама-дорогая, правда уровень нулевой даже спустя годы.Насчет ошибок еще «не соответствие», «не следование» итп которые пишутся слитно. См.

все равно не согласен с тем, что это «ошибки».это просто «путь» нерадивого «специалиста».а естественный отбор расставит все по своим местам.

2 zwitter

скорее всего программа, написанная с указанными «ошибками» — будет работать:) ведь согласитесь, хардкод и копипаст — не баги в классическом понимании.программистская ошибка для чайников — это например

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

2 Всеволод Соловьёв

По поводу плохого русского — вычитывать всё лень, но очень заметны многочисленные ошибки с -тся/-ться. Ещё пример на виду — «поконкретнее» пишется слитно, без дефисов. Слэши в перечислениях не в ту сторону.

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

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

вот это уже очень интересно. что именно противоречит здравому смыслу? мне важно знать ответ, т.к. лекция-то не последняя — надо исправляться.

именно. это скорее стиль программирования, дизайн.скорее всего программа, написанная с указанными «ошибками» — будет работать:) ведь согласитесь, хардкод и копипаст — не баги в классическом понимании.программистская ошибка для чайников — это напримерdelete p; ...if (p == NULL)...

2 zwitter

не могу назвать ничего из вышеперечисленного ошибками.

омг. оригинально. совсем-совсем ничего?

2 Сергей Щетинин

Как лекция для студентов по-моему хорошо. Но по ряду причин статье поставил 2/5.

причины типа «этой статье не место на ДОУ»? или что-то другое?

2 dalv

Тоесть std: sort и прочее содержимое std: algorithm явно придумано криворукими студентами? Нужно было сделать класс Sorter с одним статическим методом sort? Или с конструктором который будет получать 2 итератора и метод execute без параметров?:)

внимательнее читаем: значит, вы неправильно провели анализ предметной области (не всегда, но чаще всего).и кстати std используется не как класс, а как неймспейс. и, если мне память не изменяет — давно это было, это и есть namespace.

Детский сад. А может Вы мне внятно объяните, чем ООП лучше? Как по мне очередная парадигма, которая на данный момент оверюсед из-за маркетингового хайпа, раздутого вокруг нее. Очень удобна для моделирования, но преподносится сейчас как «серебряная пуля». Приписываю автору чтение Execution in the Kingdom of Nouns до полного просветления.

лучше чем что?:) я нигде не говорю, что это серебрянная пуля и статью эту читал года 2 назад. кстати там есть с чем спорить:), но в данном конкретном случае я говорю о том, что если ты уже УЧИШЬ ООП, то учи, а не отмазывайся. или приведи на собеседовании веские причины, почему его учить не надо.

Вы правда считаете, что книги по ЕтЭназерООПЛангведжВизЦЛайкСинтэкс это самое важное для будущего программиста? Это в ПТУ такому учат? Для программиста освоить очередной язычек в рамках уже известной парадигмы — дело 2х недель. Учить нужно фундаментальные вещи.

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

Например:

если вы НЕ понимаете, почему вы хотите стать программистом, то может быть вы вовсе и не хотите им становится

Слэши в перечислениях не в ту сторону.

Перевернул.

но очень заметны многочисленные ошибки с -тся/-ться

Сходу не нашёл (ни одного случая), был бы благодарен, если кто-то ткнёт носом.

2СОТОНАПо поводу плохого русского — вычитывать всё лень, но очень заметны многочисленные ошибки с -тся/-ться. Ещё пример на виду — «поконкретнее» пишется слитно, без дефисов. Слэши в перечислениях не в ту сторону.По поводу содержания статьи — она действительно из серии «Для чайников». Полных. Плюс, некоторые советы вообще противоречат здравому смыслу.Прозвучало вот ещё мнение во время краткого обсуждение статьи:

Это статья для сайта delphi-lovers.ru, но никак не для DOU

Безопасность ЖизнеДеятельности

что такое «БЖД»?

не могу назвать ничего из вышеперечисленного ошибками.

>> А что насчёт плохого русского/украинского/английского в статье? > по-конкретнее пожалуйста.ыыыыыКак лекция для студентов по-моему хорошо. Но по ряду причин статье поставил 2/5.

2 Всеволод Соловьёвпо-конкретнее пожалуйста.

И это статья для ДОУ? #01#

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

А что насчёт плохого русского/украинского/английского в статье?

Ага, спасибо. Профтыкал маленька.

2Denis Osetrov:

Автору ревьюва +5.

Это делается через звездочки: http://www.developers.org.ua/a...

Хорошая книжка для джунов, да и для самоконтроля: -). Автору ревьюва +5.

Подписаться на комментарии