Почему-то у меня в голове слово warez относится только к слову *ware (software).
Это интервью больше похоже на какое-то нагнетание элитности определенной группе.
Это как если бы какой-нибудь войсер-переводчик аниме рассказывал, с какими рисками он делает субтитры и озвучивает Наруто. Серьезно, делать камрип — я еще понимаю, дело относительно рисковое. Все же остальное, во-первых, дело практически полностью безопасное, а во-вторых, в плане сложности находится на уровне пользователя ПК (энкодинг, небольшое редактирование видео, накладывание аудио-дорожки). По аналогии — тоже самое делают переводчики аниме.
Действительно интересно было бы прочитать про хак-группы, которые воровали и взламывали софт, боролись с методами защиты ПО и носителей, взламывали сервера для «угона» игр до релиза и тому подобное.
Согласен с остальными любителями Microsoft, телефон нужен, чтобы звонить, все остальное — лишнее. С функцией «звонить» телефон Люмиа за 500$ справляется, как и все другие телефоны Nokia. Остальное — мелочи.
Мнимая аналогия. В сравнении с ПДД — изучение «старых понятий» является историей автомобилестроения и добычи железной руды, которая к вождению отношения не имеет.
Я говорю о начинающих программистах. Зачем, чтобы учить общим признакам языков программирования (типы, циклы, функции, базовые структуры), учить их абсолютно ненужной (для начинающего программиста) работе с памятью?
Зачем человеку, который только знакомится с тем, что такое программирование вообще, знать о указателях и том, как данные хранятся в оперативной памяти? Зачем знать о сложностях работы со строками в С и с чем эти сложности связаны? Зачем знать о том, что действительные числа имеют отдельные типы и арифметику? Зачем знать о том, что функции должны возвращать установленный им тип и почему?
Я говорю лишь о том, что для того, чтобы начать делать базовые программы на С нужно знать довольно много, причем даже того, что не так просто объяснить человеку, который вообще не понимает то, как работают программы и как их пишут. Гораздо проще человеку объяснить что такое указатель и как с ним работать, если он знает что такое ссылка. Просто объяснить, что в этих языках передаются не данные, а адреса этих данных, потому что так же происходит на уровне процессора и так далее и тому подобное. Тут вопрос в том, насколько это нужно начинающему программисту, задача которого изучить базовые программы, вроде подсчета суммы элементов массива, сортировки или бинарные деревья.
Все, что касается управления памятью, да и вообще то, что касается серьезного программирования — архитектура, ООП и паттерны, сложные алгоритмы, регулярные выражения, наследованные из ФП приемы — все это легко поднять, зная базис. Но зачем без базиса грузить человека особенностями языков с неуправляемой памятью — загадка.
Я написал про высшую лигу в своем сообщении, имея в виду ручное управление памятью. На самом деле эта дискуссия не имеет смысла.
Вы говорите про студентов. Я говорю про тех, кто начинает изучать программирование. Студент, который начинает осваивать программирование в ВУЗе уже совсем скоро станет неконкурентоспособным, даже если он не только про ручное управление памятью будет знать к выпуску, но и про стек, адреса возврата, переполнение буффера и о регистрах процессора x86. Учиться никогда не поздно, расширить кругозор можно даже не учась в ВУЗе, а читая документации и практические статьи.
Из вашего примера: рассказать новичку о том, что такое ссылка, гораздо проще, чем рассказать о том, что такое указатель и указатель на указатель. И проще объяснить что такое указатель, рассказав про ссылку. И проще, чем рассказать почему нельзя нормально сделать конкатенацию строк. И почему строка это массив символов, а иногда указатель на массив символов, и чем, в действительности, отличается тип с плавающей точкой от целого числа.
Ну большинство из них училось на computer science (в 70ых), создатели языков тоже, в большей степени, были учеными, а первые пользователи — математики. И первые программисты в IBM тоже имели профильное образование, если верить их биографии.
Это все исходит из стремления почувствовать себя немножко элитнее других. Например, знать haskell, пускай даже не написав и одной законченной программы на нем. Но вообще, для расширения кругозора, полезно знать о существовании функционального подхода и о плюсах отсутствия мутабельности и о прочем.
Технической (стабильность, оптимизация) и экономической (время, сложность поддержки). Речь идет о проектах, которые уже существуют, на некоторые программисты считают, что лучше было бы их сделать на чистом С. Я утрирую, но лишь немного.
У меня есть теоретические знания о CommonLisp, конечно сколько-нибудь полезного софта я на нем не писал (возможность этого вообще многими подвергается сомнению).
В рамках изучения программирования, а конкретно лямбда-вычислений и прочего, что пришло из функциональных языков, я натыкался на отсылки к некоторым языкам, вроде того же Lisp (который не является, впрочем, чистым функциональным языком). Я бы не сказал, что бум использования функциональных языков происходит сейчас, можно сказать даже, что бум создания и использования функциональных языков приходился на 70ые-80ые. А потом, как и сейчас, знание этих языков можно было назвать разве что плюсом в резюме, но никак не профессиональной направленностью. Если не касаться научной среды, конечно же.
Я слышал про lisp 5-7 лет назад, по крайней мере. И читал про практики, которые используются в функциональных языках. Сейчас на функциональных языках императивные задачи решают только программисты-тролли и разработчик ejabberd, который делает это ради смеха.
Курсы вождения, по всей видимости, тоже стоит начинать с курсов добычи руды. Иначе просто невозможно человека научить ездить не слишком медленно и не слишком быстро, а еще соблюдать ПДД.
Я, на самом деле, никого не хочу задеть своими комментариями, они, кстати говоря, вполне в рамках темы статьи — программирование везде одно, ставить ли типы перед переменными, или не ставить. Просто на самом деле для первого знакомства с программированием явно не подходят такие языки, как С и С++, которые явно имеют признаки оптимизационных приемов, например, полного ручного управления памятью, которое сейчас можно рассматривать, как оптимизационное решение, в эпоху .NET и C#. Начинающему программисту не нужно учиться управлять памятью, если во многих задачах это эффективно делает и сам компилятор/виртуальная машина.
Эти возможности могут помочь при создании оптимизированных программ, но не факт, что это нужно абсолютно всем и каждому, в каждой задаче. Тем более, что это уже более высокий уровень понимания, высшая лига, по сравнению с базовыми знаниями, которые, повторюсь, во много раз легче освоить на динамических языках.
Ну да, возможно вы правы. Тогда учить детей говорить тоже стоит со старославянского, чтобы они понимали, как образовались современные словоформы, или лучше с какого-нибудь более древного языка индоевропеской группы, из которого появился славянский. А уже в институте потом давать русский язык, чтобы они понимали, о чем говорят.
Да и вообще, что касается институтов, я считаю, что профильное образование должен получать человек, который уже знаком с программированием (на начальном уровне) до поступления. Как и с математикой, например. Давать в институте на первом курсе введение в программирование в духе «hello, world!», с современным уровнем развития интернета (в роли информационного пособия), это какой-то абсурд. Из моего ВУЗа, например, те, кто никогда не сталкивались с программированием до ВУЗа, по всей видимости, больше никогда в жизни с ним не столкнутся.
Между прочим, С и Паскаль появились почти одновременно. И то, что Паскаль изначально был простым — это факт, тем не менее, он был простым только в рамках концепции существующих тогда языков программирования и задач, которые тогда вставали в программировании и вообще для того времени (1970 год), когда программирование было чем-то более научным (самоучек было очень мало).
Тем не менее, сейчас паскаль не эффективен, не для работы, не для изучения, по крайней мере — первоначального. Что касается планки, задачи перед программистами, в 70ых стояли куда более простые, чем сейчас. Достаточно было уметь писать небольшие утилиты и простейшие драйверы, чтобы работать в microsoft в 80ых в должности ведущего программиста. Но это на самом деле все не так важно.
Скажите мне хотя бы одну задачу программирования, какой-нибудь алгоритм, за исключением самой задачи управления памятью, в которой бы это управление было частью непосредственного программирования, а не рутинной операцией или оптимизацией?
А т.н. «синдром утенка» и нежелание развиваться, как программисту, кстати, есть у всех, в том числе и у тех программистов, у которых первый хорошо освоенный язык был С. Я до сих пор я встречаю таких людей, которые обладают манией переписывания на С и при этом явно заблуждаясь в эффективности такого решения.
Прошу прощения, никакого негатива. Просто на самом деле, по личному опыту, самой большой моей ошибкой десяток лет назад было изучения программирования с паскаля, который имеет огромный порог вхожения. Еще одной ошибкой было после этого пытаться выучить С. Еще одна ошибка, что в ВУЗах преподают разработку под коммерческую платформу Delphi, в которой порог вхождения еще выше.
Если даже не рассматривать удобство скриптовых языков, я считаю, что в них есть и огромный потенциал для обучения программистов. Гораздо проще давать материал по программированию, начиная со скриптовых динамических языков, объясняя базовые типы, циклы, алгоритмы, объектно-ориентированное программирование, а уже потом объяснять, как это все работает на уровне памяти, на уровне процессора, в чем польза и вред динамической типизации и сборщиков мусора, объяснять, какие типы как хранятся в памяти и уже после этого давать компилируемые статические языки, или C#, например.
Вам может показаться это довольно странным, но я сам, после неудачных попыток взять программирование, начиная с паскаля и С (если не считать бейсик еще раньше, конечно), перешел на скриптовые языки, а уже потом легко смог усвоить то, как это все работает внутри и без проблем перешел на компилируемые, зная весь «фундамент» самого программирования, на примере скриптовых языков. И мне это не мешало интересоваться парадигмами программирования, в т.ч. функциональным подходом. И никаких проблем с необходимостью указывать типы переменных и управлять памятью у меня не было. А проблемы были только изначально, с пониманием того, как вообще программируют. И освоить это сразу на С или (не дай бог) на C++ — задача довольно сложная.
Ручное управление пямятью — программирование, автоматическое управление памятью — не программирование. Я правильно уловил мысль? То, что на С нельзя сконструировать объект на лету (ведь С вообще не объектно-ориентирован, но не важно, пускай Object-C), это плюс или минус? Знание того, сколько памяти и как выделяется при создании структуры данных, это часть программирования? Сам процесс аллоцирования/очистки памяти как-то относится вообще к самому программированию?
Мне кажется, что это скорее как ручная и автоматическая коробка передач. Вроде бы принцип разный, но по городу едут все одинаково.
Это интервью больше похоже на какое-то нагнетание элитности определенной группе.
Это как если бы какой-нибудь войсер-переводчик аниме рассказывал, с какими рисками он делает субтитры и озвучивает Наруто. Серьезно, делать камрип — я еще понимаю, дело относительно рисковое. Все же остальное, во-первых, дело практически полностью безопасное, а во-вторых, в плане сложности находится на уровне пользователя ПК (энкодинг, небольшое редактирование видео, накладывание аудио-дорожки). По аналогии — тоже самое делают переводчики аниме.
Действительно интересно было бы прочитать про хак-группы, которые воровали и взламывали софт, боролись с методами защиты ПО и носителей, взламывали сервера для «угона» игр до релиза и тому подобное.
Я говорю о начинающих программистах. Зачем, чтобы учить общим признакам языков программирования (типы, циклы, функции, базовые структуры), учить их абсолютно ненужной (для начинающего программиста) работе с памятью?
Зачем человеку, который только знакомится с тем, что такое программирование вообще, знать о указателях и том, как данные хранятся в оперативной памяти? Зачем знать о сложностях работы со строками в С и с чем эти сложности связаны? Зачем знать о том, что действительные числа имеют отдельные типы и арифметику? Зачем знать о том, что функции должны возвращать установленный им тип и почему?
Я говорю лишь о том, что для того, чтобы начать делать базовые программы на С нужно знать довольно много, причем даже того, что не так просто объяснить человеку, который вообще не понимает то, как работают программы и как их пишут. Гораздо проще человеку объяснить что такое указатель и как с ним работать, если он знает что такое ссылка. Просто объяснить, что в этих языках передаются не данные, а адреса этих данных, потому что так же происходит на уровне процессора и так далее и тому подобное. Тут вопрос в том, насколько это нужно начинающему программисту, задача которого изучить базовые программы, вроде подсчета суммы элементов массива, сортировки или бинарные деревья.
Все, что касается управления памятью, да и вообще то, что касается серьезного программирования — архитектура, ООП и паттерны, сложные алгоритмы, регулярные выражения, наследованные из ФП приемы — все это легко поднять, зная базис. Но зачем без базиса грузить человека особенностями языков с неуправляемой памятью — загадка.
Вы говорите про студентов. Я говорю про тех, кто начинает изучать программирование. Студент, который начинает осваивать программирование в ВУЗе уже совсем скоро станет неконкурентоспособным, даже если он не только про ручное управление памятью будет знать к выпуску, но и про стек, адреса возврата, переполнение буффера и о регистрах процессора x86. Учиться никогда не поздно, расширить кругозор можно даже не учась в ВУЗе, а читая документации и практические статьи.
Из вашего примера: рассказать новичку о том, что такое ссылка, гораздо проще, чем рассказать о том, что такое указатель и указатель на указатель. И проще объяснить что такое указатель, рассказав про ссылку. И проще, чем рассказать почему нельзя нормально сделать конкатенацию строк. И почему строка это массив символов, а иногда указатель на массив символов, и чем, в действительности, отличается тип с плавающей точкой от целого числа.
В рамках изучения программирования, а конкретно лямбда-вычислений и прочего, что пришло из функциональных языков, я натыкался на отсылки к некоторым языкам, вроде того же Lisp (который не является, впрочем, чистым функциональным языком). Я бы не сказал, что бум использования функциональных языков происходит сейчас, можно сказать даже, что бум создания и использования функциональных языков приходился на 70ые-80ые. А потом, как и сейчас, знание этих языков можно было назвать разве что плюсом в резюме, но никак не профессиональной направленностью. Если не касаться научной среды, конечно же.
Шучу, конечно, но тем не менее.
Я, на самом деле, никого не хочу задеть своими комментариями, они, кстати говоря, вполне в рамках темы статьи — программирование везде одно, ставить ли типы перед переменными, или не ставить. Просто на самом деле для первого знакомства с программированием явно не подходят такие языки, как С и С++, которые явно имеют признаки оптимизационных приемов, например, полного ручного управления памятью, которое сейчас можно рассматривать, как оптимизационное решение, в эпоху .NET и C#. Начинающему программисту не нужно учиться управлять памятью, если во многих задачах это эффективно делает и сам компилятор/виртуальная машина.
Эти возможности могут помочь при создании оптимизированных программ, но не факт, что это нужно абсолютно всем и каждому, в каждой задаче. Тем более, что это уже более высокий уровень понимания, высшая лига, по сравнению с базовыми знаниями, которые, повторюсь, во много раз легче освоить на динамических языках.
Да и вообще, что касается институтов, я считаю, что профильное образование должен получать человек, который уже знаком с программированием (на начальном уровне) до поступления. Как и с математикой, например. Давать в институте на первом курсе введение в программирование в духе «hello, world!», с современным уровнем развития интернета (в роли информационного пособия), это какой-то абсурд. Из моего ВУЗа, например, те, кто никогда не сталкивались с программированием до ВУЗа, по всей видимости, больше никогда в жизни с ним не столкнутся.
Тем не менее, сейчас паскаль не эффективен, не для работы, не для изучения, по крайней мере — первоначального. Что касается планки, задачи перед программистами, в 70ых стояли куда более простые, чем сейчас. Достаточно было уметь писать небольшие утилиты и простейшие драйверы, чтобы работать в microsoft в 80ых в должности ведущего программиста. Но это на самом деле все не так важно.
Скажите мне хотя бы одну задачу программирования, какой-нибудь алгоритм, за исключением самой задачи управления памятью, в которой бы это управление было частью непосредственного программирования, а не рутинной операцией или оптимизацией?
Если даже не рассматривать удобство скриптовых языков, я считаю, что в них есть и огромный потенциал для обучения программистов. Гораздо проще давать материал по программированию, начиная со скриптовых динамических языков, объясняя базовые типы, циклы, алгоритмы, объектно-ориентированное программирование, а уже потом объяснять, как это все работает на уровне памяти, на уровне процессора, в чем польза и вред динамической типизации и сборщиков мусора, объяснять, какие типы как хранятся в памяти и уже после этого давать компилируемые статические языки, или C#, например.
Вам может показаться это довольно странным, но я сам, после неудачных попыток взять программирование, начиная с паскаля и С (если не считать бейсик еще раньше, конечно), перешел на скриптовые языки, а уже потом легко смог усвоить то, как это все работает внутри и без проблем перешел на компилируемые, зная весь «фундамент» самого программирования, на примере скриптовых языков. И мне это не мешало интересоваться парадигмами программирования, в т.ч. функциональным подходом. И никаких проблем с необходимостью указывать типы переменных и управлять памятью у меня не было. А проблемы были только изначально, с пониманием того, как вообще программируют. И освоить это сразу на С или (не дай бог) на C++ — задача довольно сложная.
Мне кажется, что это скорее как ручная и автоматическая коробка передач. Вроде бы принцип разный, но по городу едут все одинаково.