Pull to refresh
332
Maxim Mozgovoy@rg_software

university professor and software developer

155
Subscribers
Send message

Извините, не было времени на подробное изучение этого аспекта, я предпочитаю учиться самостоятельно.


Пожалуй, не буду дальше читать, предпочитаю учиться самостоятельно.

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

(Я понимаю, что аргумент плох, но всё же — та статья слишком насыщена риторическими вопросами в воздух, чтобы воспринимать её как серьёзное исследование, авторы которого не стали бы писать «доколе??»).

Проблемы есть, особенно психологические, связанные с поиском новой работы, возможным переездом и т.п. Но ведь если производство не уходит роботам, оно уходит китайцам, так что какая разница? Проблема не в роботизации, а в структуре экономики, и надо некоторое перераспределение доходов и труда воспринимать как должное. По сути дела промышленный рабочий Америки получал некий сверхдоход за счёт того, что его зарплата была выше зарплаты китайца при равном труде. А теперь цены выравниваются, и роботы — лишь одна, небольшая составляющая этого паззла.
Вот я бы почитал это исследование, потому что если посмотреть графики безработицы в наиболее развитых (и, стало быть, автоматизируемых) странах, там всё неплохо, либо скачет на достаточно низком уровне. В Японии (казалось бы) безработица вообще в рамках статистической погрешности.
Это несколько упрощённый взгляд на вещи. Как только автоматизировали производство стульев, тут же выяснилось, что ценятся вручную сделанные стулья, как у прабабушки. Посмотрите на индустрию handmade.
Не очень умные люди всё равно смогут прокормиться руками или в сфере услуг.
Не совсем понятно, в чём конкретно состоит ваша профессия, поэтому сложно сказать, насколько это всё для вас угроза.
Однако в широком смысле технологии исторически не создавали особенных проблем в трудоустройстве. Да, «ткач» — это редкая (в нашей стране) профессия, но что, на улицах полно безработных ткачей? Да нет, конечно: уничтожая одно рабочее место, новые технологии создают два новых, потому что за счёт оптимизации и автоматизации становятся возможными такие проекты, которых раньше просто не существовало, а проекты всё-таки требуют людей.
В узком смысле тоже страхи преувеличены. IT — это про автоматизацию, и «автоматизация автоматизаторов» — это последнее, о чём я бы беспокоился. Думаю, вы если и стоите в очереди на сокращение, то место ваше где-то ближе к хвосту.
Философский вопрос. Не то что бы ежедневно, но где-то раз в неделю приходится расчехлять любимый FlashGet и грузить файл в пять потоков, когда браузер говорит, что иначе на загрузку уйдёт три часа. Я не знаю, с чем это связано, но факт налицо.

Так вот, почему разработчики браузеров готовы рисовать красивые информативные окна со скоростями (почему бы и нет?), но не хотят сделать такую давно известную функцию как многопоточную загрузку файла по кускам, иногда реально способную ускорить процесс раза в четыре?..
Нет, не отличались. Если не ошибаюсь, при индексации дробная часть просто отбрасывалась. А в цикле вообще можно было написать
FOR I = 1.1 to 5.0 STEP 0.2
Они притом, что вся наша дискуссия протекала в ключе «типы переменных нужны, чтобы понять, сколько памяти нужно выделить под объект». В данном случае вам нужно количество элементов (произвольного типа), поэтому мы просто возвращаемся к мысли, что можно прекрасно выделять нужную память и без типов.
Он успел стать строго типизированным :)
В Spectrum Basic моего детства было только два типа: числа и строки, причём понятия «тип» не было, просто имена строковых переменных кончались знаком доллара.
Да, конечно, в этом случае исключения не нужны. Дилемма возникает, как только потребуется корректно обработать ошибку, а не просто сообщить и завершить работу. Но может, в школе это и не понадобится вовсе.
Поэтому мне заранее нужно знать размер.
Гм… да ничего вам не нужно знать. Давайте просто код покажу. Вот эта функция попросту считывает подряд данные и формирует матрицу. Да, я тут использую размер, но только для того, чтобы понять, что пора переходить на следующую строку, но как видите, заранее ничего не выделяется:
matrix = []
N = 4
for row in range(1, N):
	matrix.append([])
	for col in range(1, N - row + 1):
		v = input()
		matrix[-1].extend(v)
	
print(matrix)

Если ввести числа 1-6, получается на выходе [['1', '2', '3'], ['4', '5'], ['6']]

Принципиальный момент: закреплять ли за каждой переменной определенный тип? Я считаю, что для школьника проще закреплять.

Я уже говорил, что начинал с Бейсика. Вот переход на строго типизированный язык для меня был труден именно тем: я не понимал, зачем нужны типы переменных. Вот есть значение, вот есть ящик, я его кладу. А как там память выделяется — проблема компилятора.
В моём примере с матрицей выше я просто записываю новые и новые элементы в список. Как он при этом растёт в длину — не моя забота.
Наверное, не стоит столь неочевидное в школе изучать.

Вы смешиваете: тема неочевидна, как и вообще все темы (а что, история или литература очевидны? их тоже в школе изучать не надо?)
Однако конкретная философия исключений может быть вполне очевидна. Если не ставить перед собой задачи описать всю многогранность проблемы, а выдать конкретный рецепт, всё будет ок :) Уж коды ошибок — это настолько неочевидная тема, а вы её предлагаете-таки :)
о смысл имеет говорить о самих экземплярах,

А что с ними не так? Вы знаете, из каких элементов состоит экземпляр, а общий его размер не имеет значения.

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

Ну это просто не так: когда вы качаете файл из интернета, тоже не всегда заранее известен его размер (это может быть видеотрансляция, например). Однако на диске память динамически выделяется, и вы об этом не думаете.

Если мне нужна треугольная матрица, я просто создам пустой список, и буду динамически добавлять в список новые элементы. Зачем мне заранее выделять память?
Да вот если бы всё было очевидно, мы бы тут который день не обсуждали бы такие вопросы :)

Троелсен исходит из парадигмы C#, в котором «нормальным» считается именно такое поведение, берущее начало из C++ и Java. Но это именно что культура конкретного языка.

В Python даже обычный нормальный выход из цикла for по достижении конца списка «под капотом» производится с помощью исключения. Я не защищаю этот стиль, но то, что на эту проблему смотрят весьма по-разному — факт.
Не так все просто. В простом ящике размером N байт можно хранить целое число или несколько целых чисел или строку символов.

Я всё равно не совсем понимаю, в чём проблема. Смотрите, есть базовые типы: целые числа, вещественные, строки. Под них динамически выделяется столько места, сколько нужно. Если вы пишете «1.25», выделится под вещественное, а если «abc» — то три символа под строку.
Есть составные типы — классы. Создайте класс Rational и храните там два числа, вот и будет вам числитель-знаменатель. Если вы создадите экземпляр этого класса, то сможете положить его в любой ящик, т.к. в ящике реально будет храниться просто указатель на ваш класс Rational в куче. Поэтому ящики и безразмерные.

Для представления графа треугольной матрицей мне в явном виде приходится выделять память,


Вам приходится, а мне не приходится :) В Python есть тип данных «список». Это просто динамический массив из произвольного количества произвольных элементов. Чтобы создать треугольную матрицу, я сделаю список, первым элементом которого будет список из одного числа, вторым — список из двух чисел и так далее.
Память будет выделяться тогда, когда я захочу в эти списки что-то реально записывать. По сути это тот же механизм, что и с динамическими строками произвольной длины.
Как-то так:
v = [[1], 
     [2, 3], 
     [4, 5, 6]]
Ну, что ж я могу сделать, если в Вики такое плохое определение? Ср. с английской, там всё гораздо менее жёстко: anomalous or exceptional conditions requiring special processing – often changing the normal flow of program execution.
Заметьте, ни слова про «бессмысленность» или «невозможность» дальнейшей работы алгоритма. Далее в английской вики: Alternative approaches to exception handling in software are error checking, which maintains normal program flow with later explicit checks for contingencies — т.е. исключения явным образом описаны как альтернативный механизм, а не инструмент для каких-то особенных случаев.
Результаты будут разными как по времени, так и по памяти.
Давайте оставим в покое оптимизацию по памяти и по времени (если речь идёт не об алгоритмической сложности, а о затратах на копирование объектов). В Питоне все типы являются ссылочными, т.е. попытка засунуть один и тот же объект в два ящика приведёт к тому, что они оба будут указывать на один и тот же объект. Если же нужна копия, следует сделать копию явно.

Конечно, это неприятный момент для новичка, но к сожалению, для объектов хорошего решения не существует в принципе, и тут работу ссылочных типов понять придётся, если стоит задача физически иметь два разных объекта.

где корни-переменные рациональные числа, и где иррациональные. Для математики эти различия носят принципиальный характер.

Опять же, давайте не путать ящики и их содержимое. В ящиках будут храниться любые значения. При этом у любого значения можно спросить: ты рациональное или иррациональное? Я не вижу здесь проблем, типы не убиваются языком, они всегда существуют.

Интерпретатор может не знать моих целей

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

В математике «тип переменной» вообще тонкая тема. В математике нет присваиваний, есть только ссылки: возьмём выражение и для краткости обозначим его как «a». В этом смысле, наверно, типов у переменных нет, но я не готов глубоко погружаться.

Экземпляр класса — это значение, которое вы помещаете в ящик. В этом смысле экземпляр класса ничем не отличается от числа 1, например. (1 — это экземпляр класса int).

Information

Rating
4,260-th
Location
Фукусима, Япония
Date of birth
Registered
Activity