Как стать автором
Обновить

Комментарии 38

Сдается мне, что для людей, не имеющих никакого представления о разработке ПО, данная статья еще больше их запутает. А в целом с посылом согласен. Но к Java и C# я бы еще C++ добавил. Все-так у начинающего программиста должно быть сформировано представление о работе с памятью.
Может все-таки C тогда, а не C++?
Автор вел речь об объектно-ориентированных языках, так что С++.
Теперь когда будут спрашивать как стать программистом, буду ссылать на данную статью. Спасибо!
Это чтобы отбить напрочь у человека желание стать программистом?

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

Визитки и простые программы — это реальные проекты. Хорошо, может «условно» реальные. Я считаю, что любое обучение всегда идет быстрее и проще на реальных задачах.
Кнут, вообще говоря, врядли является хорошим пособием для людей которые хотят стать программистом. Чтобы его читать нужно приличное количество свободного времени, математическся база и понимание того, зачем его вообще нужно читать.
И вот нескромный вопрос, но очень интересно, а Кнута реально осилили? Всего? Сколько раз перечитывали? Вопрос ни в коем случае не флеймообразующий, просто интересно:)
Читал два раза. И буду читать еще.
Для web-программиста эти и подобные задачи существенно упрощаются наличием различных CMS, большинство из которых имеют развитую инфраструктуру расширений. Разработка расширений для готовой системы значительно проще, чем реализация требуемого функционала с нуля.

Мне кажется, что хоть использовать готовые CMS проще, но для начала как раз лучше писать своё с нуля, ведь так гораздо проще понять как все работает. Особенно если человек до этого не сталкивался с программированием.
Писать с нуля свои велосипеды конечно интересней, но вряд ли полезней. Зачем расширять коллекцию govnokod.ru?
Как раз таки дико полезно, если подходить к этому правильно. Попользовался готовым решением, в качестве хобби написал свое, выкинул. Это помогает понять, как все работает изнутри. Магия — хорошо, но когда понадобится сделать что-то выходящее за рамки используемого инструмента, хотелось бы не ударить в грязь лицом. Даже написание того же расширения для CMS может обернуться катастрофой, если не знать, что конкретно днелает та или иная функция API CMS. Ровно как и использование ORM без знаний SQL.
Когда-то давно мы с коллегой писали свой фреймворк. Сейчас, оглядываясь назад, я могу сказать, что это была страшная поделка, но она внесла неоценимый вклад в мое развитие как программиста.

Зачем расширять коллекцию govnokod.ru?

Все когда-то писали говнокод, это глупо и бессмысленно отрицать. Никто не начал писать идеальный код с первого дня.
А разве написание собственной CMS не обернется катастрофой без знания архитектуры приложений? Написать что-то свое (в тех же целях обучения) можно и нужно, но мне кажется начинать с этого глупо.
Насчет говнокода: писали все и продолжаем писать. Без этого никуда. Часто это даже не является проблемой.
Если цель — быстренько сделать сайтик с новостями и картинками — да, с этого начинать не стоит. За это вообще не нужно браться. Если цель — стать программистом, то начинать нужно именно с этого.

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

А если человек с самого начала начал клепать сайты на друпале, не представляя, что у него под капотом, и как оно работает, это не программист, это сайтошлеп.
Рано или поздно сайтошлепу перестанет хватать встроенного функционала CMS. Они все сильно ограничены. И тогда уже придется учить API и писать что то свое. Но зачем писать целиком систему, если можно ограничится написанием расширения, для меня загадка.
Для разработки расширения хватит знания названий методов API. Для эффективной разработки расширения — нет, тут уже нужно знать принципы работы той части CMS, которой касаешься.

Пример не про CMS, но близкий: ORM. При наличии хорошей ORM разработчик может вообще не касаться SQL. Но если этот разработчик хочет иметь эффективную работу с БД, ему необходимо знать этот самый SQL, знать его специфику для используемой БД и знать, какой запрос генерируется каждым из методов. Я видел код людей, посылающий тонны запросов к БД только потому, что разработчик не заглядывал при работе дальше ActiveRecord. Это было ужасно, поверьте.

Заметьте, я не предлагаю всегда все писать с нуля. При достижении определенного опыта, когда написание тех или иных кусков кода будет похоже скорее на рутину, чем на создание чего-то новго, нужно переходить на уровень выше — переиспользование чужого кода (фреймворки, CMS).
НЛО прилетело и опубликовало эту надпись здесь
Если вам импонирует C, C++, C# и нет твердого желания писать кроссплатформенное ПО, то выбор очевиден — Windows

Эта фраза прямо глаз режет, тут все под одну гребенку, как будто разницы особой между языками нет и это все решения в первую очередь под win. Совсем новичков может ввести в заблуждение.
Понимаю, что фраза, возможно, не совсем корректна, но выбор тут продиктован IDE. Visual Studio действительно прекрасный инструмент, уровня которого я не встречал на Linux.
Visual Studio сделает половину работы за вас. В результате, вы в принципе будете понимать как программировать, но вот на интуитивный уровень не выйдете.
Ну для того вроде и пользуемся IDE, чтобы они делали «половину» работы за нас.
При обучении?
Опять же не понимаю что в этом плохого.
Да ничего. Просто если в VS я кликаю на кнопку на форме, а он мне сразу разворачивается объявление функции обработкий клика со всеми параметрами, или в яве я передаю объект параметром, а эклипс мне предлагает 100 вариантов каста и 500 альтернатив — чему я научусь? Кликать в код ассисте? Растаскивать кнопочки по форме?
В том же PHP некоторые IDE, вроде зенда, выбрасывают варнинги, если пишешь говно. Ну и типа исправил, да, так надо. Почему? А хрен его знает. IDE получается умнее меня.

А вот если бы потрахался, неделю выясняя почему сайт тормозит — запомнил бы раз и навсегда почему надо так а не так.
<!sarcasm>Может тогда сразу писать на Ассемблере? Будет полное понимание что и почему.
А если серьезно, то меня в свое время описанная вами ситуация наоборот подстегивала к попыткам разобраться как и что изнутри работает.
А почему <!sarcasm> то? Пописать на Ассемблере очень и очень правильно для обучения.
Извините, а в чем преимущества Visual Studio Express (мы же об обучении говорим?) перед QtCreator?

P.S. Насколько у меня сохранились воспоминания несколько-летней давности (2010 студия, вроде, была тогда) это был жуткий тормоз, который почти никак не умел парсить и автокомплитить C++, но это могло и поменяться.
Хочется дополнить, что если дядя Гриша (папин друг детства) окажется одним из адовых клиентов, то создание сайта-визитки для него отобьет всякую охоту не то что программировать, но и вообще общаться с живыми людьми.
А я б еще посоветовал для веб разработки обратить свой взгляд на ASP.NET.
И следует упомянуть так же и разработку приложений для мобильных устройств… ибо этот рынок уже достаточно развит и спросна такие вакансии растет с каждым днем.
Основной рабочий инструмент программиста — IDE.

У меня основной рабочий инструмент — специализированный текстовый редактор с подсветкой и пр. Я — не программист?
Я всегда считал, что основной инструмент программиста — это мозг… Видимо ошибался :)

Насчет советов: все хорошо, но новички ( по крайней мере, кого я вижу) хотят всего и сразу, а на классические алгоритмы смотрят как на…
Забыли CLRS — имхо, ГОРАЗДО полезнее при обучении, чем творение Кнута, при всем уважении к последнему
А еще, если зазадротить алгоритмы хорошо, не составит большого труда попасть на стажировку в крупную компанию — а там начинающему программисту дадут наставника, будут делать review его кода, и тд — это будет гораздо эффективнее, чем самому грызть гранит
По моему нескромному мнению, глубоко ошибочно оставлять за бортом основной современный тренд обучения — MOOC.

Когда меня спрашивают «как стать программистом», я отвечаю — «английский знаешь?», и если да, то добавляю две ссылки:
www.udacity.com/course/cs101 — «Introduction to Computer Science» at Udacity
www.edx.org/course/mitx/mitx-6-00-1x-introduction-computer-1122 — «6.00.1x: Introduction to Computer Science and Programming» от MIT
(или аналогичные — Stanford CS50 тоже хорош, например)
а если английского человек не знает, то это первый навык, который ему стоит освоить, а потом — то же самое.

Ну и в целом, чему бы вы ни захотели научиться, первое, куда стоит заглянуть — это class-central.com

P.S. Языки с динамической типизацией, вроде python, для изучения азов алгоритмики ничуть не хуже статически типизированных. А из статически типизированных лучше сразу брать C/C++ и взрывать мозг падавана магией указателей, указателей на указатели и прочего $ворца.
Спасибо, полезная статья
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории