avva: (Default)
[personal profile] avva
Джеймс Хэг, отличный кстати блоггер на программистские темы, написал любопытную запись

Computer Science Courses that Don't Exist, But Should

Он предлагает (шутливо, но за шуткой скрывается серьезная мысль) ввести следующие полезные предметы на факультете компьютерных наук:

"CSCI 2100: Unlearning Object-Oriented Programming"
"CSCI 3300: Classical Software Studies"
"CSCI 4020: Writing Fast Code in Slow Languages"
"CSCI 2170: User Experience of Command Line Tools"
"PSYC 4410: Obsessions of the Programmer Mind"

Подробное описание см. по ссылке. Мне больше всех первый предмет понравился, конечно. Но и третий тоже хороший.

Хочу добавить свои предложения к этому списку (и вы тоже добавляйте, если есть идеи):

1. "Как быстро начать работать с незнакомым кодом". Изучение большого массива незнакомого кода, быстрое построение ментальной модели, проверка своего понимания на прочность. Вместо экзамена - практическое задание: выбрать и починить имеющийся баг - включая весь процесс до интеграции в главную ветку - в одном из трех проектов на выбор: OpenOffice, Mozilla Firefox, Linux kernel.

2. "Как разучиться оптимизировать". Как быстрее добиться цели с помощью более простого кода. Развитие интуитивной оценки "насколько это быстро". Культура benchmarks и microbenchmarks. Что такое overengineering, на конкретных примерах, и как его избегать.

3. "Как писать медленный код на быстрых языках". Как незаметно для себя написать квадратичный код. Чем может заниматься такое долгое время программа, написанная на C++ или Java. Как добиться, по сути дела, сериализации на первый взгляд многопоточного кода.

4. "Если есть сомнения, используй хэш-таблицу". Почему никакие структуры данных не нужны, нужно просто всегда использовать хэш-таблицу.

Самый главный курс

Date: 2015-09-11 12:38 pm (UTC)
From: (Anonymous)
прогнозирование дальнейших требований заказчика (или начальства) и построение расширяемого кода с учётом этого прогноза. Для особо продвинутых - манипуляция заказчиком (начальством) с целью избежания внезапных требований, заставляющих полностью менять всю конструкцию.

Re: Самый главный курс

Date: 2015-09-11 12:45 pm (UTC)
From: [identity profile] pritkiy-kaban.livejournal.com
+1

Курс, может, быть, не самый академически важный, но на практике остро необходимый :)

Re: Самый главный курс

Date: 2015-09-11 12:48 pm (UTC)
From: [identity profile] van-wylen.livejournal.com
это не только для програмистов :)

Date: 2015-09-11 12:51 pm (UTC)
From: [identity profile] gruimed.livejournal.com
Я бы предложил два:
1. "Easy way to stop over-engineering" с битьем палками по рукам за оное.
2. "Lose unnecessary features now - ask me how"

Да!

Date: 2015-09-11 03:46 pm (UTC)
From: (Anonymous)
Отличные предложения! Это - самое главное! Из опыта.

Date: 2015-09-11 01:22 pm (UTC)
From: [identity profile] pritkiy-kaban.livejournal.com
Добавлю свои пять копеек :)

- "Как начать документировать и не бросить это гиблое дело на следующий день."

- "Замок на песке, или почему нельзя взять и построить что-либо из примеров".

Date: 2015-09-11 05:17 pm (UTC)
From: [identity profile] caztd.livejournal.com
- Как писать читабельный код :)

И для менеджеров:
- Почему вам в команде нужен technical writer

Date: 2015-09-11 07:30 pm (UTC)
From: [identity profile] pritkiy-kaban.livejournal.com
Как писать читабельный код

Боюсь что курс некому будет вести - преподаватели передерутся еще до начала учебных занятий, на стадии споров "что такое читабельный код" ;-)

Вот второй был бы очень интересен, но, наверное, вылез бы за флажки рамки курсов computer science.

Date: 2015-09-11 01:53 pm (UTC)
From: [identity profile] janatem.livejournal.com
> выбрать и починить имеющийся баг - включая весь процесс до интеграции в главную ветку

Нет, «процесс интеграции в главную ветку» должен идти отдельным курсом, причем, по-видимому, вне дисциплины computer science.

Date: 2015-09-11 01:59 pm (UTC)
From: [identity profile] janatem.livejournal.com
Насчет хэш-таблицы не очень понял. Мозг, отравленный функциональной парадигмой, стремится всеми силами избегать явно мутабельных сущностей. (Хотя хэш-таблица годится, если требуется read-only хранилище.)

if you were to translate this to English

Date: 2015-09-11 02:11 pm (UTC)
From: [identity profile] nevelichko.livejournal.com
I know a lot of people who'd be interested in your suggested additional courses. Perhaps even in CS departments :)

Date: 2015-09-11 02:51 pm (UTC)
From: [identity profile] alkach42.livejournal.com
Почему нельзя перестать понтоваться. Краткий курс.

Date: 2015-09-11 04:14 pm (UTC)
From: [identity profile] eeik.livejournal.com
обязательная практика "месяц в operations"

Date: 2015-09-11 04:46 pm (UTC)
alexeybobkov: (Default)
From: [personal profile] alexeybobkov
"Marty, you're not thinking fourth dimensionally": Как избегать ненужного рефакторинга, и как вносить маленькие изменения в код так, чтобы они не выглядели большими при сравнении версий.
Edited Date: 2015-09-11 04:46 pm (UTC)

Date: 2015-09-11 05:15 pm (UTC)
From: [identity profile] erendir.livejournal.com
"Как переходить на современные технологии вовремя" или что-то в таком духе, где темой одной из лекций было бы "Как в 2015 году отказаться от SourceSafe в пользу git".

Date: 2015-09-11 05:34 pm (UTC)
From: [identity profile] caztd.livejournal.com
Как в 2015 году понять, что за частоколом модных технологий тоже существует жизнь. (Хотя по-поводу VSS я вас персонально поддерживаю, но это не повод для принуждения к смене технологии, если люди старой технологией довольны)

Date: 2015-09-11 05:51 pm (UTC)
From: [identity profile] erendir.livejournal.com
ну поэтому и курс нужен. Типа, когда надо, когда не надо, как решить что пора заканчивать с извращениями.

А SourceSafe ужасен. Особенно если команда разработчиков так и не выяснила, как в нём делать ветки.

Date: 2015-09-11 05:22 pm (UTC)
From: [identity profile] caztd.livejournal.com
CSCI 2170 очень хорош. Я бы даже переформулировал:
Как попасть в специальный ад, выделенный для тех, кто вынуждает пользователей при интерактивной работе использовать командную строку.

Date: 2015-09-11 05:24 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
А что пользователи должны использовать при интерактивной работе?

Date: 2015-09-11 05:28 pm (UTC)
From: [identity profile] caztd.livejournal.com
Я даже по вопросу не пойму, вы жертва или студент данного курса? ;)

Date: 2015-09-11 07:23 pm (UTC)
From: [identity profile] shadow-ru.livejournal.com
Вы жертва Windows?

Date: 2015-09-11 09:31 pm (UTC)
From: [identity profile] huzhepidarasa.livejournal.com
Я пишу программы (одну программу, в основном) для пользователей. С командной строкой. И они ее используют как для интерактивной работы, так и для автоматизации (скрипты). И им это, страшно сказать, нравится. Одни и те же команды годятся и туда, и сюда.

Эта программа заменила старую программу с графическим интерфейсом. Пока еще ни один человек не попросил добавить GUI в новую программу. Даже обидно, я могу нарисовать красивые кнопочьки, а никому не надо.

Контингент польователей у нас, правда, специфический. Все глубокие технари, гуманитариев нема.
Edited Date: 2015-09-11 09:32 pm (UTC)

Date: 2015-09-13 04:13 pm (UTC)
From: [identity profile] brandt1.livejournal.com
Выпадающие списки, радио кнопки, текстовые поля, продвинутые интерактивные таблицы, слайдеры, сплиттеры, контролы для ввода даты и т.д и т.п. Очень хороший пакет - telerik.

Date: 2015-09-11 07:23 pm (UTC)
From: [identity profile] shadow-ru.livejournal.com
Работа с командной стройкой -- это и есть интерактивная работа.

Date: 2015-09-11 07:42 pm (UTC)
From: [identity profile] caztd.livejournal.com
Да, работа с командной стройкой часто интерактивна.
Из этого не следует, что интерактивная работа обязана быть с командной строкой. Да бывает, в некоем частном трагическом случае. Если вы не понимаете, в чем здесь трагичность, то вам например сюда:
exler.livejournal.com/3552481.html

Около 1 процента интерактивности в интернете идет через ОС, которая построена на интерактивности через командную строку.
И да, даже и этот 1 процент запускает свой браузер через какую-нибудь графическую оболочку.

Date: 2015-09-11 07:51 pm (UTC)
From: [identity profile] shadow-ru.livejournal.com
А, так Вы не в теме. Тогда вам сюда:

http://www.computerhope.com/issues/ch000619.htm
http://www.softpanorama.org/OFM/gui_vs_command_line.shtml

Про трагичность не понял. Андроид занимает 40%, iOS ещё 11%. А вот доля Windows сокращается год от года.

Date: 2015-09-11 08:24 pm (UTC)
From: [identity profile] caztd.livejournal.com
Сколько пользователей работает на яблоси и андроиде в командной строке, не подскажете?

И да, не надо мне рассказывать про упадок винды и преимущества CLI. На майкрософт я не работаю, а для CLI есть не-интерактивное использование, то бишь скрипты. Но это программирование, а я говорю про использование.

Когда-то на заре дней я имел несчастье рисовать в автокаде используя командную строку. Тогда это был единственный доступный метод. Но и сейчас есть люди, которые считают подобное совершенством.

Date: 2015-09-11 09:01 pm (UTC)
From: [identity profile] shadow-ru.livejournal.com
Ну, раз BusyBox стоит на десятках миллионах Андроидов, то, видимо, для чего-то консоль там используется.

CLI и более интерактивно, и более пригодно для автоматизации. Например, как выполнить такую задачу в GUI: найти в таких-то каталогах все файлы с таким-то расширением и в таком временном интервале, заменить в них foo на bar и сделать резервные копии? В консоли -- элементарно. Никакой Total Commander (не говоря уже про, ха-ха, Проводник) с удобством работы с файлами в zsh/bash не сравнится. Да и не только файлами, потому что в юниксе почти всё является файлом.

Более того, если данная задача (замена foo на bar) периодически повторяется, то мы тут же можем её автоматизировать, просто записав нашу CLI-команду в файл.

Разумеется, работать с трёхмерной графикой удобнее в GUI и с мышкой. А вот сделать ресайз 100 тыс. jpeg как-то удобнее с помощью Imagemagick. Ибо компьютер должен работать, а человек думать.
Edited Date: 2015-09-11 09:02 pm (UTC)

Date: 2015-09-11 09:48 pm (UTC)
From: [identity profile] caztd.livejournal.com
Еще раз: я говорю не про автоматизацию и не про скриптинг, а к примеру про тех людей, которые думают, что если есть CLI, то больше уже ничего не нужно. А если пользователю нужна графика, то он ее сам-иль-не-сам косо-криво сбацает (привет, КДЕ, привет Гном, салют Юнити!). Это философия линукса (но не андроида или яблоси). Это трагедия, так как приводит к тому, что технически более совершенная система остается уделом студентов и фриков. А менее совершенная растет и процветает, поскольку usability там не ругательное слово.

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

Date: 2015-09-11 09:30 pm (UTC)
From: [identity profile] shadow-ru.livejournal.com
Кстати, про интернет. Навигация там осуществляется с помощью поисковых систем, а общение с поисковыми системами происходит в ТЕКСТОВОМ виде: человек вводит запрос (аналог команды в шелл) и получает ответ системы. При необходимости он может свой запрос тут же уточнить.

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

Date: 2015-09-11 07:24 pm (UTC)
From: [identity profile] shadow-ru.livejournal.com
Наверное, было бы неплохо ещё Unlearning UML и Unlearning Debugging.

Date: 2015-09-13 04:07 pm (UTC)
From: [identity profile] brandt1.livejournal.com
А почему? Чем плох UML? Чем его следует, по вашему мнению, заменить? Насчет Debugging не понял - это какая-то система или вы имеете в виду обычное дебагирование?

Date: 2015-09-13 06:04 pm (UTC)
From: [identity profile] migmit.livejournal.com
UML, как и ООП — это некое улучшение в одной очень-очень узенькой нише, мимо которой можно всю жизнь ходить, не замечая — но которое методами тупизны и маркетинга впихивается везде, где можно впихнуть хоть как-то.

Отладка, полагаю, имеется в виду та, которую делают инструменты типа gdb — с брейкпойнтами, пошаговым прохождением программы, слежением за переменными и так далее. Здесь схожая проблема; по хорошему, это должно быть последнее средство, но часто используется в первую очередь.

Date: 2015-09-13 07:31 pm (UTC)
From: [identity profile] brandt1.livejournal.com
"одной очень-очень узенькой нише," - непонятно. Это после того как на основе этих методологий написано и неплохо работают громадное количество систем? Где это неприложимо? Что лучшее вы предлагаете?

Date: 2015-09-11 07:55 pm (UTC)
From: [identity profile] link0ff.livejournal.com
How to spend more time thinking than coding.

Date: 2015-09-11 08:26 pm (UTC)
From: [identity profile] caztd.livejournal.com
How to fix bugs by reducing the LoC metric ;)

Date: 2015-09-11 10:01 pm (UTC)
From: [identity profile] irene221b.livejournal.com
Почему нет корелляции между размером изменения в строках исходника, и масштабом разрушений изменений в поведении программы. Или как убить все, закомиттив одну измененную строку.

Date: 2015-09-12 02:13 am (UTC)
From: [identity profile] deadkittten.livejournal.com
Чтение китайского кода, основы ориентации в азиатском интерфейсе.

Date: 2015-09-12 12:26 pm (UTC)
From: [identity profile] fbpa.livejournal.com
По поводу 4го пункта. Видимо, Adobe тоже так же считает и в ActionScript сделала только один тип данных: хеш-таблицу. И массив - хеш-таблица, и Map - хеш-таблица, все - хеш-таблица.

Date: 2015-09-12 04:03 pm (UTC)
From: [identity profile] occuserpens.livejournal.com
Как научить клиента платить за обработку ошибок. В теории обработка ошибок приветствуется, например, потому, что это нужно для секьюрити. А на практике аппликейшн может ворочаться в грязи необработанных ошибок как свинья, и это никого не волнует.

Date: 2015-09-12 06:26 pm (UTC)
From: [identity profile] photo-spoiler.livejournal.com
- Дрессировка юзеров. Метод Кнута :)
- Job Security. Как создать впечатление своей незаменимости
- Аутсорсинг: как из #овна сделать конфету
Edited Date: 2015-09-12 07:39 pm (UTC)

Date: 2015-09-12 08:42 pm (UTC)
From: (Anonymous)
> OpenOffice

LibreOffice.

А Sun почтим минутой молчания.

off topic

Date: 2015-09-13 04:50 pm (UTC)
From: (Anonymous)
I apologize for off-topic: link to your English weblog seems to broken, in my browser it returns:404 not found (http://www.lovestwell.org/)

Re: off topic

Date: 2015-09-13 06:42 pm (UTC)
From: [identity profile] avva.livejournal.com
Thanks. I haven't touched it in years, unfortunately. I'll find some time to fix it soon.

Date: 2015-09-20 05:38 am (UTC)
From: [identity profile] volk007.livejournal.com
Code Maintenance: How to Understand and to Forgive.

Date: 2015-09-21 09:24 am (UTC)
From: [identity profile] a-bronx.livejournal.com
"Бескрайние поля граблей: как сравнивать и выбирать языки, библиотеки, фреймворки, платформы, паттерны и методологии, чтобы потом не было мучительно больно".

January 2026

S M T W T F S
    1 2 3
4 5 6 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 7th, 2026 03:47 am
Powered by Dreamwidth Studios