Числа Фибоначчи гораздо лучше иллюстрируют такую вещь, как динамическое программирование — получается ясный и быстрый алгоритм. И очень плохо демонстрируют рекурсию. В результате студенты уходят с представлением, что они понимают рекурсию, хотя они имеют о ней весьма смутное представление.
«взрастите в себе маленького гнусавого перфекциониста рефакторинга (не забудьте приручить его после выпуска из университета);»
К сожалению, это приводит к другой болезни. Для некоторых проектирование и рефакторинг становятся карго-культам: «надо нарисовать побольше UML-диаграмм», «тут можно сделать обобщение...»
А с остальным согласен, особенно про VCS и open-source проекты.
Он то же говорил про рекурсию и был прав. У нас почему-то принято учить рекурсии на примерах, вообще не подходящих для этого, вроде тех же чисел Фибоначчи. Если бы показывали свёртку, например, это было бы полезнее: www.joelonsoftware.com/articles/TestYourself.html
Я прошёл это тест лишь благодаря тому, что сейчас активно занимаюсь функциональным программированием и уже успел вынести себе мозг рекурсией по самое не балуй. Но большинство студентов вряд ли интересуются подобными темами, и результат печален.
Тем не менее, покемоны хороши для других областей — я изучаю всякие абстрактные разделы математики, представляя Слоупока в соответствующей ситуации. Возьмём множество слоупоков с бинарной операцией размножения...))
Сколько у Вас MIDI-устройств и под какой ОС Вы работали?
Я знаю несколько весьма известных артистов, использующих Max. Вы знаете какого-нибудь более менее известного музыканта, использующего SC?
Вы думаете, что сложные связи управления в реальном времени легче отследить в коде, чем когда они графически нарисованы?
Вы когда-нибудь работали с Max или PureData?
Алгоритмическая композиция. Обратите внимание. Я раскрою секрет, но в Ableton Live вполне можно ею заниматься даже без Max'aи гораздо удобнее, чем с SC, ибо есть такие вещь, как музыкальное время, дорожки, шины и прочая. Ну это так, лирическое отступление.
«Причём тут карго-культ?»
Вы для кого статью писали?
— Если для тех, кто знает SC, тогда зачем она им, ведь этот код примитивен?
— Если для тех, кто его не знает, тогда как они смогут понять, что там написано?
Кстати, если человек знает, что такое «треугольная огибающая», он, предполагаю, осведомлён о подобных SC системах.
А Вы обладете редкостным талантом выворачивать аргументы наизнанку :)
Я сказал, что комбинация Ableton Live + Max гораздо круче, чем SС, на что Вы ответили, что SC бесплатен, а Live с Max'ом — нет. Тогда я привёл Вам пример бесплатного аналога Max'a. Причём тут его визуальность, я, ей богу, не понимаю :)
Приведу пример. Чтобы сделать, скажем, простейший FM-синтезатор в Max'e, нужно соединить несколько объектов и всё. Вы легко можете сделать любой интерфейс, привязать его к MIDI-событиям и т.д. Если же делать то же самое в SC, Вы будете делать это в несколько раз дольше,
намучаетесь с привязкой к MIDI, а уж от перезапусков сервера у Вас голова вспухнет.
Учитывая, сколько треков были сделано с помощью Max, и сколько — с помощью SC, становится очевидным, что не один я нахожу процесс программирования в SC антивдохновляющим.
(И да, я люблю программирование, и в общем случае не люблю визуальные ЯП, — но, извините, когда я занимаюсь музыкой, у меня мысли слегка в другую сторону направлены.)
Да, я считаю так. Если Вы хотите сделать синтезатор, то Вам удобнее будет собрать его интерфейс из готовых блоков, да и сам синтезатор по большей части тоже (такие вещи, как фильтр, осциллятор, усилитель, LFO и огибающие есть в большинстве синтезаторов). Вам будет гораздо удобнее соединить визуально какой-нибудь слайдер с параметрами, которыми он управляет, чем писать 15 обработчиков событий. И будет гораздо удобнее сконцентрироваться на самой идее, которая сделает этот синтезатор отличным от всех остальных, чем на создании всей необходимой инфраструктуры для воплощения этой идеи.
Когда-то давно, когда я ещё не считал так, я потратил довольно много времени на изучение SC, именно потому, что мне казалось, что текстовое программирование всегда лучше. Я ошибался, от чего и стараюсь предостеречь других.
Дело-то не в том, что я такой умный и всё знаю, а в том, что это знает любой человек, которого интересует алгоритмическая композиция. А писать непонятный никому код в стилистике карго-культа — не есть хорошо.
Есть PureData.
Я не предпочитаю визуальное программирование. Я предпочитаю Max SuperCollider'у. Основная причина — когда работаешь с Max'ом — думаешь о музыке, когда работаешь с SC — думаешь о SC.
SynthDef(\simple_synth, { |freq = 60, ...
Вы правда считаете эту конструкцию красивой?
А про эту статью в википедии мне известно уже год, наверно. Только что Вы этим хотите сказать, мне не очень понятно? Моя критика заключается в том, что SC не подходит для творчества + что Ваша статья, раз уж на то пошло, не сильно отличается от этой.
Игрался с ним одно время, но забросил сразу после того, как в Ableton Live был включён Max4Live, т.е. поддержка языка Max/MSP.
Как язык SuperCollider ужасен и на нём нельзя сделать ничего, чего нельзя было бы сделать на Max/MSP + для Max/MSP есть возможность писать объекты на JavaScript и C (или C++, не помню точно). К тому же Max'ом пользуется такие товарищи, как Monolake и Autechre и у него гораздо более развитое комьюнити. И если ещё добавить к этому мощь Ableton Live…
А сама статья даже на введение не тянет, если честно. Единственное полезное — ссылка на книжку Cottle'a, но она гуглится за пять минут.
Мне кажется в России у талантливого разработчика 2 пути, фактически: или самому создавать бизнес или уезжать отсюда. Бывают исключения, но тратить своё время на поддержку говнокода, борьбу с менеджерами и всякое такое прочее — довольно нерационально. Ибо говнокод возникает чаще всего из-за принципиальной и непреодолимой тупости и лени писавшего, как и «рыночный» менеджмент.
Фон-неймановская архитектура имеет свои недостатки. Но даже если она сменится, программирование-то останется и будет требовать пусть немного других, но по-прежнему уникальных мыслительных способностей.
Я не думаю, что хоть какой-то аспект сократится. Я вообще их не особо разделяю. Споры возникают из-за неверных аналогий :) Да, профессии меняются, но далеко не так драматично, как Вы описываете. Я не считаю, что программирование доступно каждому с улицы. Я вижу своих одногруппников, и из 20+ человек, бывших на первом курсе, осталось 13, и программировать из них могут 2. Про ещё одну особенность мышления, которая необходима для программирования, писал Joel — нечто, связанное с пониманием рекурсии и указателей.
Я не говорю, что у врача, диагноста, учителя,… нагрузка на мозг меньше. Я говорю, что она имеет принципиально другой характер. Именно поэтому из одних людей получаются хорошие врачи, а из других — хорошие программисты.
Ой ли? Какая, например? Интеллектуальная деятельность — так можно назвать огромное количество профессий, например: учителя, врачи, физики, математики, инженеры всех сортов. Все эти профессии требуют определённый и весьма редко пересекающийся набор качеств. Да даже в пределах одной математики есть огромное количество областей, каждая из которых требует своего подхода — сравните, например, дискретную и континуальную математику. Зачем врачу оперировать сложными структурами данных, например?
Я бы не стал доверять определению программирования из вики :) Как здесь уже писали, само понятие уже стало весьма широким. Но в этом блоге и на этом сайте просто «программированием» обычно называют создание клиентских приложений для компьютеров фон неймановской архитектуры.
У узкой специализации есть и плюсы, и минусы, но она необходима — объём знаний, сгенерированных человечеством, давно уже превысил когнитивные возможности отдельного человека.
Кроме того, «все нетривиальные абстракции дырявы» (с), так что на искусственный интеллект, пишущий идеальные программы, я бы не стал рассчитывать, как и на всеобщую компьютерную грамотность :)
Недавно пытался скачать с одного сайта cheat sheet. Когда меня попросили зарегистрироваться и я увидел такие обязательные для заполнения поля как «Адрес», «Телефон», «Почтовый индекс», «Место работы» и прочая — я послал этот сайт ну вы понимаете куда. Ужасна иногда даже не регистрация сама по себе (хотя это всегда неприятно), а попытки сайтов узнать явно конфиденциальную информацию о пользователе.
Во всём согласен, кроме этого:
"… хоть и каждый может научиться этому"
В СССР же пытались сделать всех программистами. Как видим, результат — фейл. Программирование — одна из самых сложных областей деятельности, оно требует развитых математических и лингвистических способностей. Даже сама по себе чёткая постановка цели недоступна для большинства людей. Программирование так же требует таких навыков, как способность думать на разных уровнях абстракции, связывать события, происходящие в разные периоды времени, держа в голове несколько «временных снимков», умение оперировать сложным представлением данных, умение анализировать ошибки и искать источники из возникновения и т.д.
Если привести ещё одну аналогию (вся статья построена на очень неудачном использовании этих самых аналогий), то в статье высказывается примерно такая точка зрения:
«Все мы иногда клеим обои — разве это не архитектура? Скоро не будет архитекторов, а будут разумные краны, которые будут всё строить сами. И наплевать, что здания будут чаще всего рушиться на головы обитателям.»
:)
К сожалению, это приводит к другой болезни. Для некоторых проектирование и рефакторинг становятся карго-культам: «надо нарисовать побольше UML-диаграмм», «тут можно сделать обобщение...»
А с остальным согласен, особенно про VCS и open-source проекты.
www.joelonsoftware.com/articles/TestYourself.html
Я прошёл это тест лишь благодаря тому, что сейчас активно занимаюсь функциональным программированием и уже успел вынести себе мозг рекурсией по самое не балуй. Но большинство студентов вряд ли интересуются подобными темами, и результат печален.
Я знаю несколько весьма известных артистов, использующих Max. Вы знаете какого-нибудь более менее известного музыканта, использующего SC?
Вы думаете, что сложные связи управления в реальном времени легче отследить в коде, чем когда они графически нарисованы?
Вы когда-нибудь работали с Max или PureData?
Алгоритмическая композиция. Обратите внимание. Я раскрою секрет, но в Ableton Live вполне можно ею заниматься даже без Max'aи гораздо удобнее, чем с SC, ибо есть такие вещь, как музыкальное время, дорожки, шины и прочая. Ну это так, лирическое отступление.
«Причём тут карго-культ?»
Вы для кого статью писали?
— Если для тех, кто знает SC, тогда зачем она им, ведь этот код примитивен?
— Если для тех, кто его не знает, тогда как они смогут понять, что там написано?
Кстати, если человек знает, что такое «треугольная огибающая», он, предполагаю, осведомлён о подобных SC системах.
Я сказал, что комбинация Ableton Live + Max гораздо круче, чем SС, на что Вы ответили, что SC бесплатен, а Live с Max'ом — нет. Тогда я привёл Вам пример бесплатного аналога Max'a. Причём тут его визуальность, я, ей богу, не понимаю :)
Приведу пример. Чтобы сделать, скажем, простейший FM-синтезатор в Max'e, нужно соединить несколько объектов и всё. Вы легко можете сделать любой интерфейс, привязать его к MIDI-событиям и т.д. Если же делать то же самое в SC, Вы будете делать это в несколько раз дольше,
намучаетесь с привязкой к MIDI, а уж от перезапусков сервера у Вас голова вспухнет.
Учитывая, сколько треков были сделано с помощью Max, и сколько — с помощью SC, становится очевидным, что не один я нахожу процесс программирования в SC антивдохновляющим.
(И да, я люблю программирование, и в общем случае не люблю визуальные ЯП, — но, извините, когда я занимаюсь музыкой, у меня мысли слегка в другую сторону направлены.)
Да, я считаю так. Если Вы хотите сделать синтезатор, то Вам удобнее будет собрать его интерфейс из готовых блоков, да и сам синтезатор по большей части тоже (такие вещи, как фильтр, осциллятор, усилитель, LFO и огибающие есть в большинстве синтезаторов). Вам будет гораздо удобнее соединить визуально какой-нибудь слайдер с параметрами, которыми он управляет, чем писать 15 обработчиков событий. И будет гораздо удобнее сконцентрироваться на самой идее, которая сделает этот синтезатор отличным от всех остальных, чем на создании всей необходимой инфраструктуры для воплощения этой идеи.
Когда-то давно, когда я ещё не считал так, я потратил довольно много времени на изучение SC, именно потому, что мне казалось, что текстовое программирование всегда лучше. Я ошибался, от чего и стараюсь предостеречь других.
Дело-то не в том, что я такой умный и всё знаю, а в том, что это знает любой человек, которого интересует алгоритмическая композиция. А писать непонятный никому код в стилистике карго-культа — не есть хорошо.
Я не предпочитаю визуальное программирование. Я предпочитаю Max SuperCollider'у. Основная причина — когда работаешь с Max'ом — думаешь о музыке, когда работаешь с SC — думаешь о SC.
SynthDef(\simple_synth, { |freq = 60, ...
Вы правда считаете эту конструкцию красивой?
А про эту статью в википедии мне известно уже год, наверно. Только что Вы этим хотите сказать, мне не очень понятно? Моя критика заключается в том, что SC не подходит для творчества + что Ваша статья, раз уж на то пошло, не сильно отличается от этой.
Как язык SuperCollider ужасен и на нём нельзя сделать ничего, чего нельзя было бы сделать на Max/MSP + для Max/MSP есть возможность писать объекты на JavaScript и C (или C++, не помню точно). К тому же Max'ом пользуется такие товарищи, как Monolake и Autechre и у него гораздо более развитое комьюнити. И если ещё добавить к этому мощь Ableton Live…
А сама статья даже на введение не тянет, если честно. Единственное полезное — ссылка на книжку Cottle'a, но она гуглится за пять минут.
Я не думаю, что хоть какой-то аспект сократится. Я вообще их не особо разделяю. Споры возникают из-за неверных аналогий :) Да, профессии меняются, но далеко не так драматично, как Вы описываете. Я не считаю, что программирование доступно каждому с улицы. Я вижу своих одногруппников, и из 20+ человек, бывших на первом курсе, осталось 13, и программировать из них могут 2. Про ещё одну особенность мышления, которая необходима для программирования, писал Joel — нечто, связанное с пониманием рекурсии и указателей.
Я не говорю, что у врача, диагноста, учителя,… нагрузка на мозг меньше. Я говорю, что она имеет принципиально другой характер. Именно поэтому из одних людей получаются хорошие врачи, а из других — хорошие программисты.
Я бы не стал доверять определению программирования из вики :) Как здесь уже писали, само понятие уже стало весьма широким. Но в этом блоге и на этом сайте просто «программированием» обычно называют создание клиентских приложений для компьютеров фон неймановской архитектуры.
У узкой специализации есть и плюсы, и минусы, но она необходима — объём знаний, сгенерированных человечеством, давно уже превысил когнитивные возможности отдельного человека.
Кроме того, «все нетривиальные абстракции дырявы» (с), так что на искусственный интеллект, пишущий идеальные программы, я бы не стал рассчитывать, как и на всеобщую компьютерную грамотность :)
"… хоть и каждый может научиться этому"
В СССР же пытались сделать всех программистами. Как видим, результат — фейл. Программирование — одна из самых сложных областей деятельности, оно требует развитых математических и лингвистических способностей. Даже сама по себе чёткая постановка цели недоступна для большинства людей. Программирование так же требует таких навыков, как способность думать на разных уровнях абстракции, связывать события, происходящие в разные периоды времени, держа в голове несколько «временных снимков», умение оперировать сложным представлением данных, умение анализировать ошибки и искать источники из возникновения и т.д.
Если привести ещё одну аналогию (вся статья построена на очень неудачном использовании этих самых аналогий), то в статье высказывается примерно такая точка зрения:
«Все мы иногда клеим обои — разве это не архитектура? Скоро не будет архитекторов, а будут разумные краны, которые будут всё строить сами. И наплевать, что здания будут чаще всего рушиться на головы обитателям.»
:)