Pull to refresh

Comments 68

Еще, наверно, не стоит показывать примеры, далекие от реальной жизни.
Например, часто в статьях о том, как делать юнит-тестирование, его показывают на каком-то совершенно школьном примере, типа «Делаем юнит-тест для функции сложения двух чисел».
Такие примеры, конечно, демонстрируют основную идею, но этого часто недостаточно для реального применения. В той же статье про юнит-тесты можно сделать два примера: простой и сложный, в котором бы тестировался, например компонент, оперирующий другими компонентами или БД. Вот тут то и выяснилось бы, что для юнит тестирования нужно несколько больше, чем assert(a = b); нужно еще и правильно код структурировать и «мокать» уметь.
Согласен, и особенно это видно в областях, связанных с проектированием. Например, когда у меня в институте был курс по UML, я прекрасно понимал все примеры, которые нам объясняли, и при этом не мог сам правильно составить диаграмы, когда нам давали задание. Это как раз было связано с тем, что примеры были уж слишком искуственные, они слишком уж хорошо моделировались, без каких-либо недопониманий или подводных камней. В реальных задачах такое бывает очень редко.
Да, как в одной из моих любимых цитат с башорга:

Как я обожаю наши методички по лабам C++!
«Это винтик, это отвертка, винтик можно крутить отверткой. Это всякие железяки, их можно соединять винтиками, закрутив отверткой. Еще бывают гайки и шестеренки.
Задание:
Постройте синхрофазотрон.»
Вот так надо писать статью о статьях для начинающих. :)

А ещё, думаю, что авторы пишут «для начинающих» по 2 основным причинам.
1) автор недостаточно опытен, чтобы так же легко писать статьи для просвещённых;
2) начинающих больше, поэтому количество положительно оценивших статью будет больше.

Доходит даже до смешного: автор делает ряд ошибок, но голоса критиков тонет в общем положительном гуле восторгов неопытных читателей и в целом статья оказывается положительно оценённой. Это не только в учебниках «для начинающих», но и в любых статьях с красочным эффектом возможно.
Думаю, бумажные книги типа «Учим PHP за 1 день» пишутся и успешно продаются по тому же принципу (неопытных читетелей больше).
А опытные читатели, к тому же, такие книги не читают (оно им просто не надо), соответственно и покритиковать иногда некому.
3) Уменьшить среди кода, с которым приходится работать, число кода, который не нравится работать.
Голоса критиков не столь выразительны, возможно поэтому и тонут?..
>>>Человек, который знает некоторые теоретические основы (что делает компилятор, чем компиляция отличается от интерпритации, как вообще происходит процесс написания кода), но никогда не писал код сам

вот таких никогда не видел, обычно наоборот, в школе все хотя-бы видели паскаль или бейсик, а о том что за магия происходит после нажатия на кнопку run даже понятия не имеют.
А мне приходилось сталкиваться. Тут вся соль в том, что теорию, даже в программировании, можно просто заучить. Например не так уж и сложно запомнить, что explicit в C++ запрещает неявное преобразование, и если такой вопрос задаст преподаватель, то и ответ он скорее всего зачтет. При этом отвечающий может вообще не понимать, зачем это нужно, и соответственно не уметь использовать.
Ага. Думаю, даже на хабре людей, которые понимают работу компилятора на уровне глубже, чем «Ну, оно делает так, чтобы мой код, который я написал буковками запустился в виде программы» где-то меньше половины.
Фабричный подход, все нормально :)
На счет комментирования кода. Несколько лет назад, один из датских коллег сделал мне замечание, которое я запомнил на всю жизнь:

Don't comment what you are doing, comment why are you doing this.

Не нужно комментировать, что вы делаете, комментируйте почему вы это делаете.
Абсолютно правильная идея. Что мы делаем — очевидно из кода.
Кстати!
С появлением UTF-8 переменные и процедуры можно обзывать по русски.
Мало кто этим пользуется, но переменная УбитыеВороны, для русскоязычного, намного информативнее чем банальный VoronaCnt :)
Мастерски владеете Shift+Alt?
Переключение языка в Windows лучше сразу перенастроить на Ctrl+Shift: во-первых, не надо далеко тянуться (в некоторых случаях, зависящих от наличия и расположения клавиши «Fn», комбинацию Ctrl+Shift вообще можно нажать одним пальцем, задействовав соседние фаланги его), а во-вторых, нет риска перейти в меню приложения, случайно нажав «только Alt» вместо Alt+Shift.
Я Ctrl+Shift использую для выбора целых слов, например. Из-за этого на машинах с таким способом смены раскладки нередко происходит не совсем то, чего я хочу.
Для того, чтоб нажать Ctrl-Shift — надо руку оторвать от клавы (если конечно не насобачиться нажимать «одним пальцем, задействовав соседние фаланги его»), в то время как Alt-Shift позволяет переключиться, не передвигая руки, ибо Alt прям рядышком с пробелом. Не дураки придумали именно Alt-Shift, хотя сам часто ставил себе переключение по Сtrl-Shift, когда двумя пальцами в клавиатуру тыкал.
Тогда уж на CapsLock повесить, одна строчка в AutoHotkey:
Capslock::PostMessage, 0x50, 2,,, A

Хорошо, если вы работаете только за одним компьютером.
Если приходится часто работать с разными компьютерами (а то и серверами), да еще под разными учетными записями, то лучше не создавать себе проблему и переучиться на стандартную комбинацию Alt+Shift. В противном случае будет каждый раз подгорать пониже поясницы, когда по привычке будете нажимать свой Ctrl+Shift, а раскладка переключаться не будет.
мне больше нравится Ctrl+Shift, но не в падлу использовать Ctrl+Alt и Cmd+Space.

Если серьезно, то уже несколько раз сталкивался с таким кодом. Читабельность реально выше.
Родной язык воспринимается быстрее, даже при хорошем знании английского.
А если следовать Вашей логике, то и все комментарии надо писать на хорошем английском языке.
Все немного сложнее. Надо не только писать, надо думать на английском :)
А почему же тогда мы здесь общаемся на русском, а не на английском?
Почему обязательным требованием к системам, разрабатываемым для наших заказчиков, является не только русскоязычный интерфейс пользователя, но и все остальное, вплоть до диагностических сообщений в логах ( правда там допускается использовать отдельные иностранные термины )?
Почему те же Microsoft, Cisco, IBM и прочая постоянно вкладывают солидные деньги для переводов технической документации на русский язык?
Вы не находите, что англоязычные форумы иногда очень тяжело читать, даже при native владении английским, особенно, когда проблему обсуждают малазиец, немец и австралиец? А если в беседу встревают японцы с китайцами, это вообще полный караул. Очень напоминает диалоги таджикских и молдавских строителей на русском.
Я информацию ищу сначала в документации, потом на русскоязычных форумах, а на англоязычные иду в последнюю очередь.
Давайте общение и написание комментариев в коде разделять все же. Да, Microsoft, Cisco, IBM переводят документацию на русский. А Вы встречали в их коде комментарии на русском? Я — нет. А потому, что «малазиец, немец и австралиец» — они все поймут комментарий на английском, а отнюдь не на японском или китайском.
Комментарии обычно сжаты и точно по делу, они почти одинаковы будут вне зависимости от автора, потому что там нет специфики родного языка. Именно потому я и упомянул «думать», потому что когда пишешь комментарий, думаешь больше на языке программирования или близко к нему, а язык программирования, как ни странно, тоже почему-то ближе к английскому (ну не считая 1С).
DeadBirds вполне информативно.
Во-вторых, появление UTF-8 не значит, что надо превращать любой язык в 1С.
Лично меня воротит от:

Спр.ИспользоватьРодителя(0);
Спр.НоваяГруппа();
Спр.Наименование=Сред(стр,3);
Спр.Записать();

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

Или вот еще, клиент из Франции присылал пример кода с французскими переменными и комментариями. Пришлось google translate-ом пользоваться.

Спасибо, что китайцы или индусы ничего подобного не присылали.

Если уж давать имена идентификаторам, то по английски. Если писать комментарии, то также на английском (хотя, уровень английского языка у разработчиков тоже разный бывает).
Я говорю про код во внутренних проектах или, как в данном случае — статьи о программировании для начинающих. В международных — не только переменные, но и камменты должны быть по английски.
Ага. для начинающих… как начнут и как научатся, так потом и будут писать. Будут в статьях переменные на русском — потом и в реальном коде так будет. Так что переменные именовать только на аглицком. И комментарии тоже. Но с комментариями в учебных статьях конечно спорно, надо ли на английском или русском. Как вариант — комментарии в учебных статьях писать не в коде, а в тексте статьи и, конечно. на родном языке, на то она и статья.
Даже без знания английского можно именовать переменные более-менее адекватно, достаточно заглянуть в словарик. Заодно и словарный запас расширяется, да и некоторые вещи по-русски без искажений смысла не назовёшь.
Для начинающих нужно и то, и то комментировать.
Про комментирование кода очень неплохо сказано в книжке «Правила программирования на Си и Си++, Ален И. Голуб».
Да там и не только про комментирование, там вообще про программирование, что оно есть за штука — очень здорово написано и применимо не только к С/С++, а вообще, как начинающим полезно, так и продвинутым почитать. Я ее раза 3 перечитывал :)
Руководство по написанию статей для начинающих для начинающих.

Следующий уровень — руководство по написанию руководств по написанию статей для начинающих для начинающих для начинающих.
Так и знал, что кто-нибудь напишет комментарии про рекурсию :)
Написать отзыв на рецензию статьи об исследовании вопроса написания руководств по написанию статей для пишущих статьи по написанию статей для новичков?
Хорошая статья, в избранное однозначно)

Интересно, а есть ли статьи которые хоть как-нибудь соответствуют теме сабжа по Java?
Мне кажется, что для начинающих в языках программирования вообще писать статьи не надо. Есть книги, почему бы не читать именно их?
UFO just landed and posted this here
Цель статьи зачастую — описание решение проблемы или подробное описание конкретного инструмента, как-то: «Понимаем декораторы в Python», «Настраиваем репликацию MongoDB», «Как при помощи молотка и бензопилы открыть бутылку вина» и т.д., книги же, чаще всего, дают обзорные знания по какой-то конкретной предметной области или сущности предметной области.
Если речь идёт именно об описании узкой темы для продвинутого пользователя, то особой проблемы с подачей обычно не бывает. Топик о статьях для начинающих программистов, путающихся в трёх соснах.
Позволю одно замечание. Бывшие начинающие, те кто скачивали статейки в универе по модемному инету, брали книжки в библиотеке итд., реально стремились к знаниям и ни один непонятный исходник не был помехой. Сейчас же, бери и на хлеб намазывай только. К слову меня всегда по хорошему задевал непонятный код или нетривиальный алгоритм, было желание дальше вникать снова и снова, пока не добьюсь понимания. При этом рядом наставников не было. Было бы желание у человека…
Отсутствие вещей, в которые можно надолго залипнуть (онлайн игры, социальные сети, отсутствие интернета в конце концов), являлось сильным мотиватором к изучению устройства железного друга и созданию чего-то своего. Родись я на 10 лет позже, все могло сложиться в моей жизни совсем по другому.
Тогда были другие проблемы: отсутствие компьютера, книг и программ. Сложно научиться программировать, если нет среды для программирования. Отвлекающих факторов тоже было полно: уличные игры, девушки, 90-е. Если не хочешь программировать, то и не будешь.
А еще давайте осмысленные имена функциям, ибо в вашем примере функция compare на самом деле определяет максимальное число.

Да и статьи такого уровня для начинающих, это по моему слегка глуповато. Как написать hello world в интернете можно найти уж очень много, а пользователь хабра уж сможет это сделать, не блондинки ведь здесь тусят.

На мой взгляд надо рассматривать уже более глубокие вещи, на худой конец в этих статьях можно дать ссылки на основы. Многие начинающие программисты C++ не знают как работать с памятью, что и где хранится и т.д. Потому что это скучно, теория и нет практики. А ведь это основа языка. Такую статью можно написать.
Недавно начал учить RoR, и очень помогли вот эти статьи — http://rusrails.ru/getting-started-with-rails

И как пример документация к CodeIgniter — тоже хорошее начало работы, все предельно просто, а вот за документацию Zend Framework я бы отрубил пальцы ;)
«Человек, который вообще никогда не слышал о программировании»


Касательно Хабра, не думаю что стоит жертвовать интересными деталями ради выполнения этого пункта.
Не факт. Хабр, насколько я понимаю, это не сообщество кодеров, а сообщество IT специалистов. Не все IT специалисты умеют программировать.
Но те из них, кто умеют это делать, априорно считает себя выше всех остальных:)
для начинающих не надо писать статей. их надо учить в университетах математике и писать для них хорошие книги.
Товарищ Zed Shaw отличный учитель.
Мне очень понравились некоторые его приемы подачи материала из Learn Python The Hard Way (есть бесплатная веб-версия).
Хотел научить питону приятеля, и не знал с чего начать лучше и как лучше, в итоге почти всю книгу с ним разжевал на русском)) Можно хоть свою книгу издавать теперь на русском если подкорректировать историю переписки.
Веб-версия его книги вполне тянет на статьи(там как-раз по урокам разелено на страницы да и комментарии включены где он отвечает на возникшие вопросы).
Главное не забывать, что пишешь для начинающих, а не для тупых. Начинающие будут благодарны, а тупым всё равно не поможет.
UFO just landed and posted this here
Нда, к сожалению, в комментариях этот финт не работает, но в постах можно писать как-то так:

<table>
	<tr>
		<td>
			<source lang="python">
1
2
			</source>
		</td>
		<td>
			<source lang="python">
def hello(name):
    print("Hello, " + name)
			</source>
		</td>
	</tr>
</table>
Это ж повисицца можно здоровые куски кода так писать! Не то, чтоб кому-то объяснить, тут пока напишешь, у самого ум за разум зайдет с этими ручными тэгами. Нет уж, увольте, не вариант.
UFO just landed and posted this here
По нумерации строк — вариант с висящими одинокими номерами строк не по порядку все-таки странновато выглядит. Вот так вроде посимпатичнее:

#include /* (1) */
using namespace std; /* (2) */

int main(int argc, char *argv[])
{
cout<<"Hello, world!"; /* (3) */
return 0;
}

(1) - нужно для cout
(2) - cout в пространстве имен std
(3) - выводим "Hello, world!"
Да, пожалуй так выглядит получше. Вообще было бы здорово, если бы нумерация ставилась автоматически. Еще неплохо было бы иметь возможность сворачивать листинги, чтобы быстро перейти к следующему за ним тексту…
Порекомендуйте русскоязычную книгу или мануал для обучения программированию начинающих.
Хотелось бы книгу, где просто и понятно были показаны базовые алгоритмы, а в качестве примера ЯП был какой нибудь современный язык, которым потом можно будет пользоваться на практике (желательно кросплатформенный): java, python, c++.
В тех книгах, которые я нашел, например:
1. Чаплыгин А. Н. Учимся программировать вместе с Питоном — неплохо разжевано, так как книга позиционируется для детей, но к сожалению не дописана, может есть полный вариант?
2. У. Вонг Основы программирования для чайников (очень бегло и поверхностно затрагиваются темы, в качестве языка программирования используется Libery Basic)
3. Я. Файн Программирование на Java для детей, родителей, бабушек и дедушек — сразу в бой, вплоть до создание программы с GUI.
4. Паронджанов В.Д. Как улучшить работу ума. Алгоритмы без программистов — это очень просто! — пытаюсь осилить.

Хотелось бы системного подхода на примере современного ЯП с объяснением базовых алгоритмов. Без этого, как мне кажется, получается какое то обучение на коленке.

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

Будучи студентом 15 лет назад :) (не ИТ специальности) за пару недель до сессии и сдачи экзамена по информационным технологиям, при разжигании костра на даче, нашел книжку, в которой довольно просто излагались все базовые алгоритмы на примере реальных примеров и ЯП. За 2 недели я прочитал ее и легко сдал экзамен, так как не зубрил, а розобрался и все понял. Вот хочу найти что то похожее.
Гм, так если Вы уже одолели упомянутую книгу (кстати, как называется?), то зачем Вам что-то похожее? Алгоритмы-то базовые не изменились. Тогда уж лучше смотреть не на алгоритмы, а на конкретные языки, и в зависимости от того, что Вам надо реализовать — то и изучать. GUI, консоль или может web-oriented…
дело в том, что одолел я ее 15 лет назад, а сейчас не помню даже название
UFO just landed and posted this here
Шикарная статья, ничего более сказать не могу.
Sign up to leave a comment.

Articles