Комментарии 122
Забрось кого на лет сто назад — и компьютера на коленке не соберет! Да какое право он имеет после этого прикасаться к клавиатуре и считать себя не то что программистом, а даже пользователем! %)
Что появилось раньше: программа или компилятор? :)
Глупый вопрос.
Программа, т.к. для создания программы не нужен компилятор, он всего лишь перевод команды из языка высокого уровня в команды низкого уровня. Никто не запрещает писать сразу команды на «низком» уровне, на том же wasm.ru есть статейка, подтверждающая это.
Раньше появился программист\@-@/
ясно дело, программа, ведь компилятор входит в множество программ :-)
По-моему в оригинале это звучало так: «Как была написана первая программа если для ввода кода нужно некое подобие редактора?» :)
Какой редактор? :) Только пошаговый ввод в память, только тумблеры!
Мне даже довелось так попрограммировать. На военной кафедре изучали один ну очень специализированный компьютер.
Так вот он программировался через «тумблерные регистры» — такую панельку с тумблерами. Тумблер вверх — 1, вниз — 0.
Много там запрограммировать было бы сложно, но прогнать минимальные тесты, это запросто.
Так что первой была программа!
P.S. А выдача у него была лампочками и на телетайп.
Так вот он программировался через «тумблерные регистры» — такую панельку с тумблерами. Тумблер вверх — 1, вниз — 0.
Много там запрограммировать было бы сложно, но прогнать минимальные тесты, это запросто.
Так что первой была программа!
P.S. А выдача у него была лампочками и на телетайп.
Какие тумблеры? Прямое намагничивание/прожиг нужных ячеек памяти!
Среди первых редакторов был дырокол, он не программа, он железный.
А-а, уже написали! :-)
Есть много чего, чего я не знаю, но если мне это вдруг понадобится, я возьму книжку, прочитаю и пойму. Не вижу проблем.
Беда как раз в том, что и не понадобится…
Обилие библиотек демотивирует обучение основам
Обилие библиотек демотивирует обучение основам
Обилие огнестрельного оружия демотивирует обучение охоте с копьем/луком. Обилие транспортных средств демотивирует людей от пеших путешествий по маршруту Москва-Петербург и Лондон-Иерусалим. Обилие хирургических инструментов демотивирует использование примитивных инструментов для проведения операций.
Может уже всё таки хватит тащить человечество обратно?
Может уже всё таки хватит тащить человечество обратно?
Представьте себе человека, который умеет ездить, но не умеет ходить — он наверняка очень развитый)
Огнестрельное оружие изменяет способ охоты, но не отменяет основных навыков — выслеживание зверя и т.п. Если проводить аналогию, то бездумное применение высокоуровневых средств разработки сродни рыбалке с динамитом — глушанули на полметра вокруг, чтобы выловить 5 рыбок.
Я очень даже ЗА применение современных средств разработки. Но я также очень даже против их бездумного применения. В общем, я свои мысли изложил тут.
Я очень даже ЗА применение современных средств разработки. Но я также очень даже против их бездумного применения. В общем, я свои мысли изложил тут.
Если проводить аналогии можно вспомнить, что глупо заниматься охотой, выслеживать зверей, когда мясо поставляет индустрия животноводства. :)
Хотя отлично понятно недовольство ловких и быстрых охотников, осознающих, что жирный мясник в грязном фартуке производит в разы больше мяса, чем они.
Да ну? Меня лично наоборот мотивирует :-)
Большинство хороших программистов были самоучками, и двигало их на пути изучения IT именно жажда знаний.
Большинство хороших программистов были самоучками, и двигало их на пути изучения IT именно жажда знаний.
Занятно, что примерно то же самое, мне говорили на зачёте студенты, не знающие ответ на вопрос. В этом случае я давал им книжку, и говорил — почитайте. Результат был удручающий, ведь в книжка — это не список вопросов и ответов.
Разобраться с чем-то не имея некоторой базы знаний и опыта — очень трудно, примерно как пристроить кусочек паззла не зная общей картины.
Разобраться с чем-то не имея некоторой базы знаний и опыта — очень трудно, примерно как пристроить кусочек паззла не зная общей картины.
>> Разобраться с чем-то не имея некоторой базы знаний и опыта — очень трудно
С чего вы взяли, что у меня нет знаний и опыта?
*Очень удивлен*
С чего вы взяли, что у меня нет знаний и опыта?
*Очень удивлен*
На экзаменах одной из дисциплин препод разрешал пользоваться всем и уходил из кабинета, трети студентов это не помогало. 98 год, физическая химия
«Молодой человек, чем меньше Вы знаете, тем больше я ценен как специалист» (с) :-)
Все так. Только нужно знать, что «это» существует, и что об этом можно прочитать.
«Хороший инженер не тот, который все знает (потому что знать все невозможно), а тот, которые знает, где это можно прочитать»
(с) Один из моих Преподавателей
«Хороший инженер не тот, который все знает (потому что знать все невозможно), а тот, которые знает, где это можно прочитать»
(с) Один из моих Преподавателей
Если сможет это найти и разобраться.
Я как-то искал статьи на тему метрик программного кода, чтобы разобраться с приводимыми в книгах статистиками.
Знаете, во всем интернете не нашел нужной ссылки… может, я не умею искать? ;-)
И разобраться с некоторыми вещами без знания теории алгоритмов, например, практически нереально.
Придется возвращаться и восполнять эти самые фундаментальные знания, а это же драгоценное время, которого всегда не хватает… У Вас никогда не будет лишних пары лет, чтобы разобраться :-)
Я как-то искал статьи на тему метрик программного кода, чтобы разобраться с приводимыми в книгах статистиками.
Знаете, во всем интернете не нашел нужной ссылки… может, я не умею искать? ;-)
И разобраться с некоторыми вещами без знания теории алгоритмов, например, практически нереально.
Придется возвращаться и восполнять эти самые фундаментальные знания, а это же драгоценное время, которого всегда не хватает… У Вас никогда не будет лишних пары лет, чтобы разобраться :-)
Очень правильное (хотя и несколько агрессивно высказанное) мнение.
С ужасом отмечаю в подрастающем поколении программистов абсолютное исчезновение навыков именно программирования, замененное на владение инструментарием. Программирование из искусства все вернее превращается в ремесло, существующее за счет мастеров, создающих инструменты…
Нет, я все понимаю, без хороших инструментов невозможно быстро двигаться вперед, именно высокий уровень абстракции позволяет в сжатые сроки решать сложные задачи. Но все эти библиотеки… они же растут как на дрожжах, появляются все новые и новые… Одни использую другие… и вот, чтобы открыть простое окошко с тремя кнопками нам надо установить полтора гига безумно полезных библиотек, большая часть которых вообще непонятно что делает, но она используются теми, которые (точнее, некоторые функции которых) нужны нам…
Что-то подсказывает, что такой путь развития не может быть единственно верным, должно быть еще какое-то решение.
С ужасом отмечаю в подрастающем поколении программистов абсолютное исчезновение навыков именно программирования, замененное на владение инструментарием. Программирование из искусства все вернее превращается в ремесло, существующее за счет мастеров, создающих инструменты…
Нет, я все понимаю, без хороших инструментов невозможно быстро двигаться вперед, именно высокий уровень абстракции позволяет в сжатые сроки решать сложные задачи. Но все эти библиотеки… они же растут как на дрожжах, появляются все новые и новые… Одни использую другие… и вот, чтобы открыть простое окошко с тремя кнопками нам надо установить полтора гига безумно полезных библиотек, большая часть которых вообще непонятно что делает, но она используются теми, которые (точнее, некоторые функции которых) нужны нам…
Что-то подсказывает, что такой путь развития не может быть единственно верным, должно быть еще какое-то решение.
Это конечно Ъ, но боюсь на тот же «чистом С/C++» быстро и много не напишешь. А вот на скриптовых языках типа perl,php, etc с готовыми библиотеками — пожалуйста. А в игру можно играть и дальше: давайте окунемся лет энтак на 300 назад. Что мы видим? Сумеет ли современный человек хоть что-то подсказать своим потомкам?
предкам т е
Знаете, мой первый учитель программирования говорила (это была моя мама): «на любом языке можно решить [почти] любую задачу.» Это верно и сейчас. Особенно с появлением библиотек.
На «чистом» perl, php и т.п. можно решить не больше задач, чем на «чистом» С/С++. Ведь язык — это, в первую очередь, синтаксические и логические конструкции. Другое дело — экосистема, которая бывает накручена вокруг языка. Она часто настолько велика, что её начинают отождествлять с языком.
Насчет быстро и много — вопрос типа задачи и навыка. Есть куча задач, которые на PHP даже с библиотеками не решишь (например сделать драйвер устройства — ну не предназначен PHP для этого!). Также и наоборот, делать на С++ веб приложение — полная глупость :-)
Но мне вот вспоминается то время, когда библиотек было не так много, и все приходилось делать руками… и практиковался такой подход — опытные программисты на С++ делают компоненты, которые что-то распознают, эффективно работают с данными и т.п., а потом студенты без опыта все это в бейсике собирают в рабочее приложение… ничего не напоминает?
На «чистом» perl, php и т.п. можно решить не больше задач, чем на «чистом» С/С++. Ведь язык — это, в первую очередь, синтаксические и логические конструкции. Другое дело — экосистема, которая бывает накручена вокруг языка. Она часто настолько велика, что её начинают отождествлять с языком.
Насчет быстро и много — вопрос типа задачи и навыка. Есть куча задач, которые на PHP даже с библиотеками не решишь (например сделать драйвер устройства — ну не предназначен PHP для этого!). Также и наоборот, делать на С++ веб приложение — полная глупость :-)
Но мне вот вспоминается то время, когда библиотек было не так много, и все приходилось делать руками… и практиковался такой подход — опытные программисты на С++ делают компоненты, которые что-то распознают, эффективно работают с данными и т.п., а потом студенты без опыта все это в бейсике собирают в рабочее приложение… ничего не напоминает?
А вот забросят вас во время когда даже С нету, а только перфокарты, и?..
Обычно делают наоборот: студенты-кодеры пишут кусочки кода ( например на чистом С ) а потом опытный дядька все это собирает в кучу. Я не против «чистого С», например — тем более программа написанная например на С для парсения текста работать будет быстрее чем любой скриптовый язык. Но при этом возникает столько рутины ( причем эту рутину должен описать опытный программист ) что уж проще эту рутину заменить строчкой кода, написанную на скриптовом языке студентом.
Согласен, что проще. Важно помнить, что это не студент написал программу разбора строки, а он использовал чужую программу с заданными параметрами — ровно это и представляют из себя скриптовые языки.
В офис давным давно встроен язык программирования. Я встречал множество пользователей, которые автоматизировался для себя многие задачи с его помощью. но они не считали себя программистами.
В офис давным давно встроен язык программирования. Я встречал множество пользователей, которые автоматизировался для себя многие задачи с его помощью. но они не считали себя программистами.
Извините, поправлюсь: следует читать не «скриптовые языки», а «большинство программ на скриптовых языках»
Я бы ещё чуть поправил — библиотеки и компоненты существуют не только для скриптовых языков, да и C/C++ (которые уже, о боже, называют низкоуровневыми) не обязывают каждую программу начинать с написания, например, функций сортировки строк и т.п. Ну просто нет нужды в том, чтобы каждый программист написал для себя весь базовый набор библиотек, а количество программистов, необходимое для поддержания этого набора — таки не стремится к бесконечности. Поэтому есть люди, которые никогда и не заглядывали в это нутро, но зато умеют мастерски разбираться с более высоким уровнем абстракции решая иные задачи.
Вопрос же сведётся как всегда к другому — на любом уровне абстракции необходимы хорошие навыки программирования. Но на нижних уровнях они нужней и важней, поскольку от них зависят все «этажи», поэтому на верхних соответственно почти всегда пишут те, кто хуже разбирается и даёт худший результат (за исключением тех случаев, когда требуется результат выше «удовлетворительного»).
Вопрос же сведётся как всегда к другому — на любом уровне абстракции необходимы хорошие навыки программирования. Но на нижних уровнях они нужней и важней, поскольку от них зависят все «этажи», поэтому на верхних соответственно почти всегда пишут те, кто хуже разбирается и даёт худший результат (за исключением тех случаев, когда требуется результат выше «удовлетворительного»).
Всегда остаются задачи, упирающиеся в физические ресурсы, и как правило для их решения нет стандартных инструментов. Приемлемые решения задач такого рода всегда имеет узкий круг применимости, что практически уничтожает возможность адаптации к другой среде. Зато в области применения выжимаются все 100% ресурсов.
Что-то мне поплохело когда я представил библиотеку, собранную из кусочков, написанных студентами.
Если контролировать процесс и обложить тестами — может быть вполне адекватная система. Между прочим RUP на таком принципе построен — вначале мегамозги создают архитектуру, генерят исходный код проекта, а потом программисты наполняют сгенеренные функции кодом. И это даже работало (не всегда, но тут уже были другие причины провала, такие как изменение требований).
<сарказм>Давно вы на мамонта (слона) с копьем охотились? Или, может, утку из лука подстрелили? Или, может, вам на практике пригодились подобные знания? Нет?? Ну надо же!</сарказм>
На практике такие навыки очень даже пригодились бы! и без всякого сарказма — всем отделом играем в дартс :-)
Это что-то вроде «промышленной революции». Неизбежный переход от «ручного труда» к «конвейерной сборке», что, безусловно, является прогрессом.
Конечно, сейчас есть вещи сделанные вручную, они дороги и качественны. Дороже и качественнее фабричных аналогов. Как и программы изящно написанные с нуля — лучше оптимизированы, но дороги в разработке. Однако, софтовый «ширпотреб» более дешев и качественен именно со «всеми этими библиотеками».
Конечно, сейчас есть вещи сделанные вручную, они дороги и качественны. Дороже и качественнее фабричных аналогов. Как и программы изящно написанные с нуля — лучше оптимизированы, но дороги в разработке. Однако, софтовый «ширпотреб» более дешев и качественен именно со «всеми этими библиотеками».
Я согласен, что это неизбежно, и что это просто особенность рыночной экономики.
Я совсем даже не против использования библиотек, они хороши и полезны мне угнетает, что тенденция развития отрасли приводит к снижению планки понятия «программист». Как слово менеджер, звучащее весьма уважительно лет эдак 15 назад сейчас превратилась во что-то пренебрежительное.
Я совсем даже не против использования библиотек, они хороши и полезны мне угнетает, что тенденция развития отрасли приводит к снижению планки понятия «программист». Как слово менеджер, звучащее весьма уважительно лет эдак 15 назад сейчас превратилась во что-то пренебрежительное.
Это вы точно подметили.
Я думаю, что такая тенденция почти со всеми профессиями, которые становятся массовыми. Когда мой отец был программистом, это была очень редкая профессия, «планка» была высока, профессия была предметом особой гордости. Я, конечно, и сейчас горжусь, что я программист, однако таких как я — вагон и маленькая тележка.
Сейчас все еще гордо звучит — космонавт. Быть может мы еще станем свидетелями снижения «планки» и у них. :)
Я думаю, что такая тенденция почти со всеми профессиями, которые становятся массовыми. Когда мой отец был программистом, это была очень редкая профессия, «планка» была высока, профессия была предметом особой гордости. Я, конечно, и сейчас горжусь, что я программист, однако таких как я — вагон и маленькая тележка.
Сейчас все еще гордо звучит — космонавт. Быть может мы еще станем свидетелями снижения «планки» и у них. :)
следуя вашей логике только человека, который пишет на машинных кодах можно считать программистом. Остальное ( в том числе С,C++) — это пользователи, т к они пользуются компиляторами, написанными другими людьми
По комментам четко видно, кто чем мазан :-)
Красота, можно на работу брать/не брать :-)
Красота, можно на работу брать/не брать :-)
Всё-таки Вы не правы. Талантливых программистов не стало меньше в абсолютных числах, скорее наоборот, в профессию пришло больше людей способных делать качественные программы. Но вырос сам рынок — труда этих людей недостаточно, он значительно вырос в цене, а потребителей удовлетворяют и результаты худшего качества за меньшую цену. Соответственно появляются и худшие исполнители.
Поэтому в осознании себя программистом — не стало меньше достоинства. Просто «табель о рангах» — значительно расширился.
Поэтому в осознании себя программистом — не стало меньше достоинства. Просто «табель о рангах» — значительно расширился.
Программирование из искусства все вернее превращается в ремесло, существующее за счет мастеров, создающих инструменты
Надеюсь, что как раз этап «ремесло» на текущий момент пройден и мы перешли к «фабрикам и заводам».
Не понимаю, что вас смущает, это вполне эволюционный путь развития. К сожалению, все люди не могут обладать одинаково высоким уровнем знаний, а ждать пока один ремесленник или мастер будет 5 лет писать свою программу, человечество, увы, не может.
> С ужасом… Программирование из искусства все вернее превращается в ремесло, существующее за счет мастеров, создающих инструменты…
Блин. Что в этом ужасного? В любой индустрии нужны не художники, а ремесленники. Причем желательно потом этиъх ремесленников заменить чем-то автоматизированным.
Блин. Что в этом ужасного? В любой индустрии нужны не художники, а ремесленники. Причем желательно потом этиъх ремесленников заменить чем-то автоматизированным.
Архитектору, который строит дом с нуля, не нужно проектировать каждый болт, гайку и кирпич. За него это уже сделали люди, придумали фреймворки стандарты, и вместо того, чтобы бегать и вручную нарезать резьбу и обжигать кирпичи, он берет уже готовое
Фреймворки — это, грубо говоря, набор хороших велосипедов, в свое время сделанных людьми для того, чтобы облегчить себе работу. Сортировка массива — она как ГОСТовский кирпич — бери и пользуйся. Конечно, можно сделать свой кирпич(метод), но уверены ли вы, что он будет так же надежен, как спроектированный неглупыми людьми и использующийся в миллионах проектов? И чем выше уровень абстракции, с которым работает человек, тем больше ему приходится пользоваться готовыми материалами и инструментами, вместо изборетения новых — и это нормально! Когда вам нужно повесить картину, вы берете гвоздь и молоток, а не бегаете с мыслями «так, нужно что-то тонкое чтобы забить его в стену и что-то тяжелое, чем я буду забивать».
Фреймворки — это, грубо говоря, набор хороших велосипедов, в свое время сделанных людьми для того, чтобы облегчить себе работу. Сортировка массива — она как ГОСТовский кирпич — бери и пользуйся. Конечно, можно сделать свой кирпич(метод), но уверены ли вы, что он будет так же надежен, как спроектированный неглупыми людьми и использующийся в миллионах проектов? И чем выше уровень абстракции, с которым работает человек, тем больше ему приходится пользоваться готовыми материалами и инструментами, вместо изборетения новых — и это нормально! Когда вам нужно повесить картину, вы берете гвоздь и молоток, а не бегаете с мыслями «так, нужно что-то тонкое чтобы забить его в стену и что-то тяжелое, чем я буду забивать».
Небольшое добавление.
Архитекторов долго и упорно учат — какие ГОСТы кирпичей бывают, чем они отличаются, в какой ситуации и для чего применимы и т.п. И эти самые ГОСТы кирпичей появляются крайне редко.
Новые фреймворки появляются непрерывно. Чем они отличаются? Когда применимы а когда нет? Где нас ждет подстава?
цитата: если бы строители строили дома так, как программисты пишут программы, то первый же дятел разрушил бы цивилизацию.
Архитекторов долго и упорно учат — какие ГОСТы кирпичей бывают, чем они отличаются, в какой ситуации и для чего применимы и т.п. И эти самые ГОСТы кирпичей появляются крайне редко.
Новые фреймворки появляются непрерывно. Чем они отличаются? Когда применимы а когда нет? Где нас ждет подстава?
цитата: если бы строители строили дома так, как программисты пишут программы, то первый же дятел разрушил бы цивилизацию.
> Архитекторов долго и упорно учат — какие ГОСТы кирпичей бывают, чем они отличаются, в какой ситуации и для чего применимы и т.п. И эти самые ГОСТы кирпичей появляются крайне редко.
> Новые фреймворки появляются непрерывно. Чем они отличаются? Когда применимы а когда нет? Где нас ждет подстава?
Архитектуре уже 100500 лет, программированию, как профессии — лет 40. Будут и ГОСТы, и ситуации и т.п.
> Новые фреймворки появляются непрерывно. Чем они отличаются? Когда применимы а когда нет? Где нас ждет подстава?
Архитектуре уже 100500 лет, программированию, как профессии — лет 40. Будут и ГОСТы, и ситуации и т.п.
Думаю, что топик не о том, что не нужно пользоваться готовыми библиотеками/фреймворками (в аналогии — гвоздями с молотком), а о том, что нужно ещё знать как они устроены и уметь, при необходимости, написать свои (устройство гвоздя и молотка, полагаю, известны всем).
Например, если я напишу, что нужно знать ассемблер, меня забросают гнилыми помидорами, мол есть же оптимизирующие компиляторы, кому это ассемблер упёрся. Зато, когда приходит дапм от пользователя, и мне приходится разбираться с кодом, который этот компилятор сделал, знание ассемблера здорово помогает.
Например, если я напишу, что нужно знать ассемблер, меня забросают гнилыми помидорами, мол есть же оптимизирующие компиляторы, кому это ассемблер упёрся. Зато, когда приходит дапм от пользователя, и мне приходится разбираться с кодом, который этот компилятор сделал, знание ассемблера здорово помогает.
но уверены ли вы, что он будет так же надежен, как спроектированный неглупыми людьми и использующийся в миллионах проектов?
К сожалению, мы пока находимся на том этапе, когда сомнения в этом вопросе более продуктивны, чем уверенность. Иногда приходится браться проектировать и реализовывать инструменты, поскольку имеющиеся — действительно некачественны. Но к счастью, это лишь отдельные случаи.
Условия: «вас отбросило на десятилетия назад» и «без привычной системы обслуживания фреймворков и библиотек» никогда не выполняются, знаете что делает с таким кодом оптимизирующий компилятор?
Да, а тех, кто в прошлом не смог бы себе собирать монорельсовую дорогу с поездом, гнать с позором из «славного племени водителей монорельса».
Аналогично с любым устройством/орудием труда сложнее камня и палки.
Аналогично с любым устройством/орудием труда сложнее камня и палки.
ну так зачем на 10-летия? давайте уже к пещерным людям.
Ни охотится не сможем ни защищаться от нападков соседних племен — пользы от нас не будет настолько мало что никто не захочет кормить и если вдруг и примут — то выгонят очень быстро за бесполезностью. Даже элементарно огонь то развести без спичек мало кто из нас сможет — так и помрем голодной холодной смертью )
Ни охотится не сможем ни защищаться от нападков соседних племен — пользы от нас не будет настолько мало что никто не захочет кормить и если вдруг и примут — то выгонят очень быстро за бесполезностью. Даже элементарно огонь то развести без спичек мало кто из нас сможет — так и помрем голодной холодной смертью )
Случись такое, я бы нашел в сети Гвидо Ван Россуму (автору Python), сказал ему, что я парень из будущего и рассказал про то что он придумает Python, про синтаксис, про то как всем он будет нравится. Потом позвонил бы Давиду Ханссону, рассказал как он придумает Ruby On Rails. И так по списку…
Возможно этим парням кто то так и позвонил…
Возможно этим парням кто то так и позвонил…
Покидая на сегодня Хабр, хочу высказать автору БОЛЬШОЕ СПАСИБО, за то что он поднял такую острую тему.
Надеюсь, многих (или хотя бы некоторых) это заставит немного задуматься.
Надеюсь, многих (или хотя бы некоторых) это заставит немного задуматься.
Поддерживаю автора поста. Вот этот комментарий, мне кажется, уместен и здесь тоже: habrahabr.ru/post/147343/#comment_4966461
Браво, снимаю шляпу!
Боюсь, от виселецы дивелопера не спасёт даже словарь русского языка, разве что по тыковке им стучать до посинения.
НЛО прилетело и опубликовало эту надпись здесь
Опять двадцать пять. О «мудрецы», сидящие в башнях из слоновой кости, подозрительно смахивающей на дешёвый асбест, оставьте уже свой максимализм и поймите уже такую простую вещь: человек, знающий досконально все сложные алгоритмы, уже реализованные до него в библиотеках и фреймворках, обладает знаниями, не нужными при написании прикладного кода. Те же самые задачи сможет с тем же, а то и с большим успехом выполнять некто, кто вместо осушения своего мозга математикой узнал про то, какие вообще бывают алгоритмы, в каких библиотеках их можно найти, и в каких случаях применять. Ему на это потребуется на несколько порядков меньше времени. Освободившееся время он потратит на изучение паттернов проектирования и набивание руки на задачах из реальной жизни. Стало быть, такой специалист обойдётся дешевле, а работу свою (которая состоит в написании, скажем, сервера онлайн-процессинга транзакций) выполнит лучше, поскольку от него там не требуется писать ещё одну отличающуюся от других десятью строками реализацию алгоритма перемножения матриц, а требуется писать стабильно работающий и хорошо поддерживаемый в дальнейшем код.
Перестаньте уже путать теоретиков, занимающихся фундаментальными исследованиями (а именно этим и является создание сложных алгоритмов) с практиками, комбинирующими существующие решения для наиболее оптимального решения возникающих в реальности задач. Первые называются учёными, вторые — инженерами, коими и являются программисты/разработчики.
Перестаньте уже путать теоретиков, занимающихся фундаментальными исследованиями (а именно этим и является создание сложных алгоритмов) с практиками, комбинирующими существующие решения для наиболее оптимального решения возникающих в реальности задач. Первые называются учёными, вторые — инженерами, коими и являются программисты/разработчики.
Что же будет делать такой специалист, когда данные, с которыми он работает, станут чуть-чуть другими? Например, входные потоки транзакций окажутся не совсем отсортированными по времени, при этом их станет несколько, от меток времени останутся только наносекунды (младшие 32 бита), а выбранная им для слияния и доупорядочивания этих потоков в реальном времени приоритетная очередь скажет «не успеваю»? Найдет ли он в своей необъятной памяти название алгоритма, пригодного для такой ситуации? Или ему-таки придется вспомнить, что такое реализация алгоритма и как ее пишут? Достаточно ли у него опыта, чтобы справиться с такой задачей?
(Пример не вымышленный — я сейчас работаю над обработкой как раз таких потоков данных, правда, это не транзакции).
(Пример не вымышленный — я сейчас работаю над обработкой как раз таких потоков данных, правда, это не транзакции).
Вот. Вы сейчас привели пример случая, когда нельзя использовать готовые решения. Возникают такие случаи не так уж и часто и для реализации сложных вещей в компании имеет смысл держать кого-то, кто именно на такой алгоритмике специализируется. Не на архитектуре, не на написании кода с использованием 33 паттернов, а именно создании сложных с математической точки зрения алгоритмов. Но бросать персонажей с необходимым для этого складом ума на все остальные задачи? Увольте. Разделение труда не просто так придумали.
«Вакансия: ученый. Требования: свободное программирование на машине Тьюринга и алгоритмах Маркова; умение реализовать с нуля основные известные алгоритмы и структуры данных на ассемблере, на C# и на F#; знание принципов ООП и паттернов, но категорический отказ их использовать».
А какже понимание принципов пространства Манковского? Кто-то же должен понимать, что на самом деле Эвклидово учение безвозвратно естарело! :)
знание принципов ООП и паттернов, но категорический отказ их использоватьДавно не разгребали код, который писали математики? Покопайтесь на выходных в OpenSSL.
> Первые называются учёными, вторые — инженерами, коими и являются программисты/разработчики.
Только вот проблема в том, что ПО для своих исследований ученым приходится писать самостоятельно, т.к. просить о чем-то программиста — проще застрелиться! Программист никогда за разумные сроки не реализует то, что тебе нужно: начать хотя бы с того, что программист совершенно не разбирается в области исследования и его «оптимизации» зачастую приводят к полной непригодности ПО.
Так что, мы продолжаем материться, но использовать свои велосипеды: уж лучше ездить на старом «запорожце», нежели молиться на блестящий «мерседес», не способный и на метр самостоятельно сдвинуться.
Только вот проблема в том, что ПО для своих исследований ученым приходится писать самостоятельно, т.к. просить о чем-то программиста — проще застрелиться! Программист никогда за разумные сроки не реализует то, что тебе нужно: начать хотя бы с того, что программист совершенно не разбирается в области исследования и его «оптимизации» зачастую приводят к полной непригодности ПО.
Так что, мы продолжаем материться, но использовать свои велосипеды: уж лучше ездить на старом «запорожце», нежели молиться на блестящий «мерседес», не способный и на метр самостоятельно сдвинуться.
Речь, насколько я понимаю, шла об ученых-информатиках, работа которых — изобретать велосипеды для всех. Включая мерседесы, бентли и новенькие Space Ship One.
> ученых-информатиках
Это что за сферические кони в вакууме?
Нет таких. Все велосипеды изобретаются физиками, математиками, биологами и т.п. тогда, когда наступает такой период, что существующего аппарата для решения поставленной задачи не хватает, либо время решения задачи и/или затрачиваемые ресурсы чрезмерно велики.
Так и появляются новые алгоритмы фильтрации, сортировки, распознавания и т.д., и т.п.
Т.е. к «запорожцу» прикручивают самопальный глушитель, инжектор, подушки безопасности, систему катапультирования, реактивный двигатель…
А «изобретатели мерседесов» продолжают наполировывать свой никому не нужный мерседес и гордо лупить себя пяткой в грудь: «вот какой у меня распрекрасный мерседес, не то, что ваш жопер с реактивным двигателем и перископом» ☺
Это что за сферические кони в вакууме?
Нет таких. Все велосипеды изобретаются физиками, математиками, биологами и т.п. тогда, когда наступает такой период, что существующего аппарата для решения поставленной задачи не хватает, либо время решения задачи и/или затрачиваемые ресурсы чрезмерно велики.
Так и появляются новые алгоритмы фильтрации, сортировки, распознавания и т.д., и т.п.
Т.е. к «запорожцу» прикручивают самопальный глушитель, инжектор, подушки безопасности, систему катапультирования, реактивный двигатель…
А «изобретатели мерседесов» продолжают наполировывать свой никому не нужный мерседес и гордо лупить себя пяткой в грудь: «вот какой у меня распрекрасный мерседес, не то, что ваш жопер с реактивным двигателем и перископом» ☺
Ну, не знаю. Сейчас посмотрел биографии Кнута, Дейкстры, Хоара. Они скорее специалисты по информатике, чем по своим «университетским» специальностям. И их велосипедами мы прекрасно пользуемся до сих пор.
Ну, все-таки они ближе к математике, чем к сферической информатике в вакууме.
И зачем «сферическому» математику был бы нужен quicksort? Любой квадратичный алгоритм с задачей справится. А когда мы начали работать со сложностью алгоритмов, это уже пошла совсем другая теория, к дотьюринговской математике отношения не имеющая. И занимаются ей не ради «поставленных задач», а ради ее самой, т.е. опять же в вакууме.
К теории алгоритмов, я бы сказал.
>Вам нечего рассказать толпе, любое ваше слово без доказательств реализации будет звучать, как пук. И впереди у вас в лучшем случае — виселица.
Фримену эти мысли, вероятно, навеял старый рассказ Кира Булычева «Паровоз для царя» (есть еще мультфильм по его мотивам «Чудеса в Гусляре»), о том, как на Землю попал инопланетянин, который ничего не мог рассказать о своей цивилизации, кроме того, что цивилизация очень развитая, а он специализируется в счетоводстве и знает только, на какие кнопки когда нажимать.
Очень похоже:
Фримену эти мысли, вероятно, навеял старый рассказ Кира Булычева «Паровоз для царя» (есть еще мультфильм по его мотивам «Чудеса в Гусляре»), о том, как на Землю попал инопланетянин, который ничего не мог рассказать о своей цивилизации, кроме того, что цивилизация очень развитая, а он специализируется в счетоводстве и знает только, на какие кнопки когда нажимать.
Очень похоже:
Скрытый текст
…
— Не повезло нам с гостем. Надо же, попался такой, который ничего не знает.
— Это не так! — ответил Вусц. — Я отлично знаю, какие кнопки когда нажимать.
— Вот именно, — сказал Ложкин и ухмыльнулся.
— А ведь зря к человеку пристал, — сказал Удалов. — Представь себя на его месте.
— Даже и не буду пытаться, — ответил Ложкин. — Отказываюсь верить, что такая темная личность представляет такую развитую цивилизацию. Мы-то, чудаки, сбежались: космонавт прилетел, с отдаленной планеты, сейчас нас просветит
…
— Я тебе, Ложкин, сейчас в два счета докажу твою неправоту. Хочешь?
— Докажи.
— Тогда представь себе, что я — царь Иван Грозный.
— Еще чего не хватало!
— А ты представь, не сопротивляйся. А Грубин, допустим, его друг — Малюта Скуратов.
— И что?
— А ты — Николай Ложкин, который сел в машину «Жигули» и по непристойному стечению обстоятельств сбился с пути и вместо Вологды попал к Ивану Грозному в его загородный дворец.
…
— А дальше я тебя попрошу рассказать, как вы живете в двадцатом веке и какие у вас технические достижения. А ну-ка расскажи.
…
— Я тебе лучше паровоз объясню.
— Ну как? — спросил Удалов у «Малюты Скуратова». — Послушаем про паровоз?
— Давай, — согласился «придворный фаворит». — Только если не объяснит, придется его казнить.
…
— Не повезло нам с гостем. Надо же, попался такой, который ничего не знает.
— Это не так! — ответил Вусц. — Я отлично знаю, какие кнопки когда нажимать.
— Вот именно, — сказал Ложкин и ухмыльнулся.
— А ведь зря к человеку пристал, — сказал Удалов. — Представь себя на его месте.
— Даже и не буду пытаться, — ответил Ложкин. — Отказываюсь верить, что такая темная личность представляет такую развитую цивилизацию. Мы-то, чудаки, сбежались: космонавт прилетел, с отдаленной планеты, сейчас нас просветит
…
— Я тебе, Ложкин, сейчас в два счета докажу твою неправоту. Хочешь?
— Докажи.
— Тогда представь себе, что я — царь Иван Грозный.
— Еще чего не хватало!
— А ты представь, не сопротивляйся. А Грубин, допустим, его друг — Малюта Скуратов.
— И что?
— А ты — Николай Ложкин, который сел в машину «Жигули» и по непристойному стечению обстоятельств сбился с пути и вместо Вологды попал к Ивану Грозному в его загородный дворец.
…
— А дальше я тебя попрошу рассказать, как вы живете в двадцатом веке и какие у вас технические достижения. А ну-ка расскажи.
…
— Я тебе лучше паровоз объясню.
— Ну как? — спросил Удалов у «Малюты Скуратова». — Послушаем про паровоз?
— Давай, — согласился «придворный фаворит». — Только если не объяснит, придется его казнить.
…
Многие не особо сложные алгоритмы (особенно на графах) были сформулированы сравнительно недавно. Практически любому программисту было бы что рассказать 40 лет назад. А 60 лет назад еще не додумались даже до алгоритма поиска кратчайшего пути в графе, быстрой сортировки, хеш-таблиц!
Да уж. Категорично и эмоционально. И уровень направленной на читателя (в т.ч. на меня) агрессии тоже как-то не к месту.
Нам есть что «сказать» толпе даже вообще без компьютеров, не говоря уже об инструментах программирования. Главное наше умение (по крайней мере для абсолютного большинства из нас) — это умение вникать в проблему и находить ее решение (анализ/синтез, индукция/дедукция, суждения/умозаключения). И это умение абсолютно применимо в любой жизненной ситуации. Действительно, у программистов может не быть опыта подобного применения своих умений, но по-моему это частности. Опыт — дело наживное.
К тому же, наш багаж знаний, основанный на знании инструментов программирования, тоже по-моему далеко не пук. Это в первую очередь набор паттернов, которые рождались и совершенствовались на протяжении довольно длительного времени силами достойных представителей нашей профессии. Эти паттерны вполне можно рассматривать просто как более высокий уровень абстракции программы (без подробностей реализации), как цель. А это уже немало, согласитесь. Видя цель, прокладывать к ней путь можно (и нужно) имеющимися средствами.
В моей практике был случай, в некотором роде соответствующий описываемому «перестыку во времени»: имея некоторую практику общения с платформой 1С (v 7.7. и 8.2) и конфигурациями на базе этой платформы, пришлось решать задачи учета с использованием Visual FoxPro. В дело пошли знания о том, «как это было» в 1С. Дело было за малым — написать свою реализацию с учетом уже известных достоинств/недостатков.
Думаю, подобные случаи были в практике большинства программистов.
Нам есть что «сказать» толпе даже вообще без компьютеров, не говоря уже об инструментах программирования. Главное наше умение (по крайней мере для абсолютного большинства из нас) — это умение вникать в проблему и находить ее решение (анализ/синтез, индукция/дедукция, суждения/умозаключения). И это умение абсолютно применимо в любой жизненной ситуации. Действительно, у программистов может не быть опыта подобного применения своих умений, но по-моему это частности. Опыт — дело наживное.
К тому же, наш багаж знаний, основанный на знании инструментов программирования, тоже по-моему далеко не пук. Это в первую очередь набор паттернов, которые рождались и совершенствовались на протяжении довольно длительного времени силами достойных представителей нашей профессии. Эти паттерны вполне можно рассматривать просто как более высокий уровень абстракции программы (без подробностей реализации), как цель. А это уже немало, согласитесь. Видя цель, прокладывать к ней путь можно (и нужно) имеющимися средствами.
В моей практике был случай, в некотором роде соответствующий описываемому «перестыку во времени»: имея некоторую практику общения с платформой 1С (v 7.7. и 8.2) и конфигурациями на базе этой платформы, пришлось решать задачи учета с использованием Visual FoxPro. В дело пошли знания о том, «как это было» в 1С. Дело было за малым — написать свою реализацию с учетом уже известных достоинств/недостатков.
Думаю, подобные случаи были в практике большинства программистов.
Автор говорит про то, что нужно не забывать то, что под капотом.
И не только оперировать готовыми абстракциями, но и быть в состоянии создать свои.
А багаж фундаментальных знаний хорошо дополняет тот базис, который мы получили в прикладном программировании.
В любом случае все эти знания в практическом смысле служат одной большой цели: умению мыслить.
И не только оперировать готовыми абстракциями, но и быть в состоянии создать свои.
А багаж фундаментальных знаний хорошо дополняет тот базис, который мы получили в прикладном программировании.
В любом случае все эти знания в практическом смысле служат одной большой цели: умению мыслить.
Предлагаю вам сыграть в одну игру.
Я попытался оформить отрывистые мысли, возникшие у меня после прочтения и обсуждения, во что-нибудь цельное. В результате получился целый пост.
Я понимаю что к основам php никогда не относился и относиться не будет, слишком высокоуровневая штука, надстройка. Но что касается фреймворков — всегда хотелось вначале написать на чистом php, затем на фрейворке. Это не всегда мешало в этой профессии… хотя с другой стороны и без фреймворка напишу что нужно, а наиболее часто используемые мной вещи оформил в «минифреймворк для себя»
Ну давайте по приколу перенесемся лет на 10 в будущее. Вам сильно поможет знание конкретных детерменированных алгоритмов в системе с вероятностными механизмами? Фреймворки правда идут тем же лесом.
Программист — это в последнюю очередь конкретный инструмент, ЯП или недайбоже фреймворк, система с плагинами или что там еще используется для решения конкретной задачи.
В первую очередь — это способность формализовать задачу, во вторую — довести формализованную задачу до какого-то алгоритма, в третью — реализовать этот алгоритм на чем-нить. Знание конкретных алгоритмов полностью равно знанию конкретных инструментов — для какого-то круга задач это имеет смысл, для другого достаточно лишь знание параметров, а для всех остальных это знание академическое.
Вот например для того что бы отсортировать массив я использую «order by» и уж поверьте, для любой практической цели конкретный алгоритм, который при этом используется, мне важен в последнюю очередь.
Программист — это в последнюю очередь конкретный инструмент, ЯП или недайбоже фреймворк, система с плагинами или что там еще используется для решения конкретной задачи.
В первую очередь — это способность формализовать задачу, во вторую — довести формализованную задачу до какого-то алгоритма, в третью — реализовать этот алгоритм на чем-нить. Знание конкретных алгоритмов полностью равно знанию конкретных инструментов — для какого-то круга задач это имеет смысл, для другого достаточно лишь знание параметров, а для всех остальных это знание академическое.
Вот например для того что бы отсортировать массив я использую «order by» и уж поверьте, для любой практической цели конкретный алгоритм, который при этом используется, мне важен в последнюю очередь.
Хм. Как раз на эту тему мне как-то накипело и я писал небольшую статью. Еще до того, как зарегился на хабре.
«Магия» Linq
«Магия» Linq
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Я, пользователь!