Pull to refresh
58
0
Пионтковский Андрей @jlbyrey

User

Send message
Только нужно отметить, что *-IPS матриц много и сабж проявляется далеко не на всех.
Почему-то у меня в голове слово 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), это плюс или минус? Знание того, сколько памяти и как выделяется при создании структуры данных, это часть программирования? Сам процесс аллоцирования/очистки памяти как-то относится вообще к самому программированию?

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

Information

Rating
Does not participate
Registered
Activity