План учебника
Jan. 27th, 2015 12:29 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Совместными усилиями с
snowman_sailor и
ramendik написали план учебника по введению в программную инженерию. Вместо двух частей получилось три.
На мой взгляд, проект получился весьма амбициозным, и не уверен что у нас троих хватит квалификации, чтобы раскрыть (особенно, учитывая ограничения на объем) все темы. (правда, как известно, хочешь в чем-нибудь разобраться - прочитай по нему спецкурс).
В общем я бы с удовольствием пригласил на отдельные разделы других авторов, которые лучше меня понимают в соответствующих вопросах. (все это планируется публиковать под CC).
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
На мой взгляд, проект получился весьма амбициозным, и не уверен что у нас троих хватит квалификации, чтобы раскрыть (особенно, учитывая ограничения на объем) все темы. (правда, как известно, хочешь в чем-нибудь разобраться - прочитай по нему спецкурс).
В общем я бы с удовольствием пригласил на отдельные разделы других авторов, которые лучше меня понимают в соответствующих вопросах. (все это планируется публиковать под CC).
no subject
Date: 2015-01-27 09:42 am (UTC)Либо название поменяйте, либо надо сокращать. Введение в специальность - курс на десяток лекций, и тоненькая брошюрка.
no subject
Date: 2015-01-27 09:47 am (UTC)И в первом семестре было 10 теоретичеких курсов с учебниками сравнимой тошщины. Ну ладно, 8 если выкинуть высшую математику и историю КПСС.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 10:03 am (UTC)no subject
Date: 2015-01-27 10:07 am (UTC)Если конкретно - скромный эпилог под заголовком "Жизнь после релиза" придется развернуть в три самостоятельных раздела, превышающие по объему весь остальной текст, вместе взятый.
Честно говоря, мне хотелось об этом сказать сразу, как только увидел оный план. Но вот как раз потому, что учебник называется "Введение...", а не "Конструирование больших программных систем", заставил себя заткнуться.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 10:07 am (UTC)1) введение про время, причинность и теорию относительности (что бывают события, про которые нельзя сказать, кто был первым, что сообщения распространяются не мгновенно, и т.д.); - кстати, обьяснять VCS и БД будет проще
2) введение в моделирование данных и онтологию (почему нельзя всему присвоить id, почему вредно считать что чего-то бывает только 1 штука, что такое вообще identity - сравнение по ссылке, по значению, почему нельзя составить Исчерпывающий Список Всего, что делать если мы Машину-5 разобрали на Запчасть-7 и Запчасть-8, а потом собрали из них Машину-10 и Машину-11 и т.д.)
Особенно это в форматах данных важно (версионирование, то-се. СУБД часть вопросов худо-бедно закрывают)
UPD: отличие между неизвестными, ошибочными, неполными и неточными данными еще
3) про оценку производительности (как мерять, как интерпретировать результаты, как искать бутылочные горлышки)
4) как собирать с юзеров фидбек, как отличать фантазии юзеров от наблюдений юзеров (известный анекдот "голова болеть начала? а вот когда мы эту сотовую вышку еще и включим..."), и вообще инженерия требований, хоть она и достойна отдельной книги...
5) как правильно обрабатывать ошибки, хмммм, тут нет серебряной пули но я где-то видел хороший сравнительный обзор, только ссылку потерял
Список ни в коем случае не полон, просто не включая мозг написал
no subject
Date: 2015-01-27 10:35 am (UTC)Это что-то вроде онтологической базы системной инженерии. Чему пытается учить
Ну то есть если вы сумеете впихнуть это в 3-5 страниц. это можно включить во введение. Но боюсь, что тут понадобится более объемное изложение.
Про оценку производительности спряталось под заголовками "нагрузочное тестирование и профайлинг".
Про взаимодействие с польхователями есть. Инженерия требований и правда, достойна отдельной книги. Причем не для всех из тех, кому нужен этот курс, будет нужен и тот.
Что касается того, как правильно обрабатывать ошибки, то это должно идти красной нитью через всю вторую и третью часть. Потому что вообще говоря вся архитектура и весь программистский инструметарий - это средства, позволяющие либо обрабатывать, либо не допускать определенные типы ошибок.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 10:43 am (UTC)Это надо изучать если не в начальной школе, то по крайней мере не позже полового созревания. Но лучше всё-таки в начальной.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 10:09 am (UTC)В первой части - каши больше. в третьей - меньше.
Дабы не быть голословным:
- разделы "межпрограмное взаимодействи", "Расширяемые программы", "использование внешних программ", IMHO нуждаются в сведении в
два раздела
no subject
Date: 2015-01-27 10:16 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:YES!
From:no subject
Date: 2015-01-27 10:41 am (UTC)к процессу подготовки первокурсников в рамках массового очного первого образования 17-леток отношения не имеет. (простите ради аллаха, вы давно первокурсников "среднего хорошего вуза" вживую видели?)
P.S. (читать "введение в специальность" в течение ДВУХ СЕМЕСТРОВ раз в неделю, как здесь предлагалось - это безумие. Введение должно быть достаточно интенсивным, а не подпороговым, чтобы скорость запоминания хоть немного превышала скорость выветривания)
P.P.S - основной вопрос - пожалуйста, сообщите предпололжительное кол-во учебных часов для этого курса?
no subject
Date: 2015-01-27 10:46 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 11:07 am (UTC)no subject
Date: 2015-01-27 11:11 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 11:15 am (UTC)В целом, императивно-описательный подход к разработке GUI я считаю бессмысленным. Это итеративный процесс. Человек должен иметь культурный базис. Человека нужно заставлять начинать с малого и грубо тыкать
харей в мордув ошибки и недоработки. Подавляющее большинство людей не в состоянии даже модальный MessageBox сделать без грубейших ошибок, препятствующих нормальной эксплуатации.Раскина я бы не рекомендовал. Точнее - воздержался бы от любых рекомендаций кроме штатных руководств от разработчиков ОС.
В общем, задумка благородная, но с реализацией ясности нет никакой.
no subject
Date: 2015-01-27 11:24 am (UTC)Именно с целью формировать культурный базис. (ну плюс еще идея о том, что главный критерий удобства - привычность. И если сделать как у всех, скорее всего получится не совсем уж гадостно).
Раскин нужен для того, чтобы расшатать немного те устои, которые могли уже сформироваться в голове в результате использования существующих UI. Не надо меня убеждать что Раскин не всегда прав - мой любимый редактор vim.
Он интересен в первую очередь как попытка создать целостную концепцию, отличную от ставшей общепринятой. И, кстати, кое что из его идей сейчас явно оказалось востребованным. Например, в Windows в стартовом меню есть поиск приложений, что вполне укладывается в раскинскую концпецию клавиши Jump.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 12:12 pm (UTC)Python, AWS, Django, scrapping, REST API, Jenkins, Gerrit, Ubunty, d3.js, numpy немного работа с кластерами и анализ данных
Ну и опыт преподавания какой-никакой но есть.
Только вношу рационализаторское предложение делать это в виде гитхабовского репозитория чтобы материал поддерживать хоть в каком то более или менее современном состоянии.
no subject
Date: 2015-01-27 12:13 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 12:22 pm (UTC)http://wizzard0.livejournal.com/493257.html?thread=5316809
Я имею ввиду, в том числе, условно, что 90% софта - для внутреннего пользования, 9% развлечения, и 1% критического софта, на котором зиждется цивилизация :)
no subject
Date: 2015-01-27 02:49 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 01:36 pm (UTC)В современно мире возможно не совсем корректно называть мобильные приложения особым случаем, он уже несколько лет такой же равноправный как и CUA
no subject
Date: 2015-01-27 01:56 pm (UTC)no subject
Date: 2015-01-27 01:44 pm (UTC)embedded - это о другом.
no subject
Date: 2015-01-27 01:54 pm (UTC)По моему,и идея что можно генерировать код не для текущего процессора настолько очевидна, что большого внимания не заслуживает
Вот в главе про деплоймент и дистрибуцию, есть пара мест где можно остановиться на особенностях крос-сборки. Это там, где автоматические системы конфигурмрования, и там где сборка в пакеты. Потому что часто встречаается такая система сборки, которая требует исполнения чего-то свежесобранного. Причем для target-архитектуры, причем по делу.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2015-01-27 02:13 pm (UTC)no subject
Date: 2015-01-27 02:18 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Конкурентное программирование
Date: 2015-01-27 02:57 pm (UTC)Современные ЯП, реализующие эту парадигму, это Erlang и Go (а также фреймворк Akka для Scala).
Для понимания отличий параллельного программирования от конкурентного, можно посмотреть вот это: http://blog.golang.org/concurrency-is-not-parallelism
Ну и http://state-threads.sourceforge.net/docs/st.html также хорошо объясняет подход.
Re: Конкурентное программирование
Date: 2015-01-27 03:11 pm (UTC)Не знаю как Erlang и Go, а в Scala + Akka спагетти получается не намного меньше чем в классической модели на коллбеках, при этом код с использованием Akka получается довольно паскудным из-за того что нигде не фиксируется контракт взаимодействия между акторами. Вдобавок обработка ошибок возможна только бинарная: либо все ОК, либо не ОК и тогда все умирают. Все что выходит за рамки ОК/фейл приходится делать ручками усложняя и без того сложную систему сообщений.
no subject
Date: 2015-01-27 03:50 pm (UTC)привелечь пользователя ailev на тему структуризации указаного многообразия
рассмотреть опыт Википедии и СтэкОверфлоу -- на тему того чтобы сделать этот учебник и открытым и дополняемым,
на основе современных возможностей.
Бумажный (даже электронный) талмуд,
все равно никто читать не будет,
даже если он будет сделан (что весьма сомнительно)
You need a main logical thread
Date: 2015-01-27 03:58 pm (UTC)A good plan for a book of this kind should include - and it's the requirement number ONE - some INTERNAL LOGICAL THREAD, which is easy to follow, which makes sense, and so makes it possible to teach varied material as something coherent.
FOR EXAMPLE, a possible main logical thread might be created like this.
Programs live on a computer like animals in a forest, and the "forest" is the environment the computer forms for them. The computer itself is a dead hardware box, and it is something called OS that connects hard drives, memory, periphery into a meaningful whole.
But how can a human user interact with it? - the earlier generations of computer engineers
and OS designers standardized on something called "a shell".
Then you continue with the UNIX PHILOSOPHY, i.e. the principle that programs (runnable from command line or shell scripts) are written in such a way that
(a) they do one thing well rather than many things (all things one can think of ) in one fat executable. Examples: compression programs must know how to compress, but not archive, for that we have "archive programs", etc.
(b) but many specialized programs can be connected into processing CHAINS to combine them and achieve complex tasks
This is done thanks to special features of SHELL (piping, STDIN/STDOUT, ....)
THIS APPROACH was found to be very powerful, and it survives to this very day in PROFESSIONAL applications of computers: shells/REPL/... are built into many programs which at a later stage acquired GUIs
One of the major disadvantages of the Command Line interface to computers is that one has to KNOW before one can use the "commands"
Later people devised the GUI approach. It substitutes this need to know up front with an ability to explore menus -- but is infinitely more restrictive. Therefore to this very day GUI-based attempts at professional application (e.g. GUI-based plotting or math crunching (MathCAD)) are weaker tools than those based on CL (Mathlab).
Most of development follows the CL paradigm and this is the first environment a software engineer needs to learn
But because in today's world we use GUI/window-based environments in which many inidvidual windows (running CL or GUI apps) are living, we will use GUI tools as well.
As a rule, knowing a CL version of development tools makes one immediately understand the (simplified) GUI front-ends to them, but the reverse does not work, a GUI-literate developer will feel helpless when having to switch to CL environment
(2)
NEXT you follow a logical sequence for introducing
-- scripting
-- compilation
-- languages with REPL
-- debugging
-- version control
-- testing
The windowing environments and GUI progs are introduced as TARGETS for the students' future development efforts.
You may show the GUI world mostly as a convenience for the less computer literate and almost totally computer illiterate (from the engineering point of view) end users, who only know how to work in end user programs, and are almost disfunctional as far as the computer itself, as a system is concerned (the "forest" in which animals-progs live).
So this is a natural progression following the needs of the developer rather than an attempt to list all unrelated bits one's memory retained, without rhyme or reason.
You need a certain NARRATIVE to tell, not a mosaic of brightly coloured pieces of various shapes and sizes to dazzle - and leave helpless.
Re: You need a main logical thread
Date: 2015-01-27 05:56 pm (UTC)Программирование это искусство взаимодействия. Взаимодействия программы с с ее окружением и взаимодействие программиста с его окружением. У этого взаимодействия сложилась определенная культура которую описывает данная книга.
Что касается аналогий и центральной идеи, то я категорически против такого подхода. Он удобен для автора, но опасен тем что провоцирует заметать под ковер вещи, не укладывающиеся в рамки исходной идеи. Программирование, как и любая другая практическая дисциплина, само по себе huge mess его нельзя утоптать в рамки одной стройной концепции.
Также я категорически против исторического подхода к изложению. Это вносит в голову студента путаницу и невозможность ответить на вопрос: а что из этого актуально прямо сейчас. Примерно как если начинать курс "Компьютерные сети" с рассказа о модели OSI. В результате студент искренне уверен что OSI это физически существующая величина, или, в лучшем случае стандарт, а вовсе не искусственная абстракция.
Поскольку книга для программистов, подход к изложению должен быть инженерно-программистский: постановка задачи - решение.
Есть конкретные каналы передачи информации от пользователя к программе и от программы к пользователю. Как сделать интерфейс в зависимости от того какую информацию в какую сторону нужно передавать? Какими свойствами этот интерфейс должен обладать? Что делать если какой-то из каналов информации недоступен?
нанизать бусины на нитку
From:or, more succintly
Date: 2015-01-27 04:38 pm (UTC)the course should follow the HISTORIC outline of computing as it developed,
and at the same time look at this historical progression through the eyes of a developer.
Then:
OS, CL, languages (compiled, LISP-like, scripting),
programming paradigms (a series of instructions; objects living in an object universe; complex "matroyshkaed" sentenses, calculating the ultimate program as a sort of function, etc.)
development tools, development procedures (version control, editors, testing, etc.)
networking, distributed computing paradigms (e.g. client-server; parallel, erlang as an expression of one successful paradigm etc.)
Internet and Web-based computing and tools
AND LATER - specific areas to make students aware of the ideas of security, of commercial distortions of the purely engineering approach to computing etc.
---------
I.e. being historic, putting Unix (=professional and industrial rather than aimed at an uneducated user) development in front of the Windows and MacOS platforms, and progressing along the real history of computing, but looking at it from a developer's perspective.
Then not only a strong narrative emerges, but the course will double as a short history of computers, as it needs to be told to young professionals.
Should be much more interesting than the proposed "bag of (poorly related) things"
no subject
Date: 2015-01-27 05:46 pm (UTC)По мне так единственный действенный способ борьюы с троянами и руткитами -- исполнять программы только из доверенных источников. А для остальных случаев пользоваться одноразовыми изолированными окружениями и блокираторами скриптов (если они пришли из веба) Об этом всем тоже надо обязательно написать. Иначе, если читать оглавление, создается впечатление что антивирус -- панацея...
no subject
Date: 2015-01-28 05:38 am (UTC)При этом считать емейл, в заголовке
From:
которого написано имя и адрес вашего друга, — недоверенным источником.Компьютерная гигиена. Не запускать какие попало программы. Не работать под админским аккаунтом. Не вставлять в свой компьютер незнакомые USB-устройства и не допускать своим бездействием, чтоб в ваш компьютер было вставлено незнакомое USB-устройство. Если незнакомый сайт говорит вам «АХТУНГ! У вас тут вирусы, немедленно скачайте и запустите вот это» — вы знаете, что делать.
Как распространяется malware. Почему открытие документа в ассоциированном с ним приложении или открытие сайта по ссылке в самой свежей версии браузера даёт сильно меньшую, но ненулевую, вероятность заразиться по сравнению с прямым запуском недоверенного исполняемого файла. Песочницы, Noscript, Flashblock, фаерволы.
Как работает антивирус (сигнатурный метод обнаружения угроз) и почему он не панацея. Проблема остановки в тьюринг-полных вычислительных моделях и почему поведенческий анализ тоже не панацея.
Отдельным пунктом: котики и пляшущие кролики не являются достаточной причиной для игнорирования правил гигиены.
Но вообще это глава не из этого курса. Это должны знать все пользователи, а не только те, кто собирается избрать IT своей специальностью.
no subject
Date: 2015-01-28 05:26 am (UTC)Именно учебник с таким содержанием будет по-любому говном. Аргументирую: у него совершенно не понятная аудитория, он не найдёт своего читателя. Даже если вы сможете точно сформулировать и описать человека, которому всё из перечисленного нужно, а всё остальное нужно в куда меньшей степени, это будет чрезвычайно узкое описание. Для совсем начинающего нужен совсем другой учебник - про переменные и циклы, и про передвижение курсора сразу по словам в текстовом редакторе. Свежему выпускнику нужно введение в git и поднатаскаться к собеседованиям. Опытному разработчику нужен какой-то лишь очень небольшой процент из перечисленного, да и то, он не нужен заранее, а нужен только тогда, когда будет подходящий проект.
no subject
Date: 2015-01-28 09:08 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:ТОП: 11:00 (московское)
Date: 2015-01-28 08:00 am (UTC)Это Ваш 1-й ТОПовый пост в этом году.
Посмотреть статистику автора можно в карточке топблогера (http://rating.t30p.ru/?vitus_wagner.livejournal.com&p=tops).
no subject
Date: 2015-01-29 03:39 pm (UTC)Не нашел эти темы в плане
Date: 2015-02-03 08:56 pm (UTC)Вопрос, точнее два:
1. Не вижу UML - почему? что читатель уже знает основы и этого достаточно или UML-диаграммам не место в этом курсе?
2. Что с шаблонами/паттернами проектирования - слишком сложны для введения в специальность?
Re: Не нашел эти темы в плане
Date: 2015-02-04 04:11 am (UTC)2. Пол Грэм считает, что шаблоны/паттерны имеют смысл только для слишком низкоуровневых языков вроде Java. На нормальных языках любой паттерн должен быть оформлен как макрос или библиотечная функция.