node778327
phpinfo()
PHP Logo

PHP Version 5.3.10-1ubuntu3


System Linux apal 3.5.0-54-generic #81~precise1-Ubuntu SMP Tue Jul 15 04:02:22 UTC 2014 x86_64
Build Date Apr 11 2012 17:10:58
Server API Apache 2.0 Handler
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc/php5/apache2
Loaded Configuration File /etc/php5/apache2/php.ini
Scan this dir for additional .ini files /etc/php5/apache2/conf.d
Additional .ini files parsed /etc/php5/apache2/conf.d/apc.ini, /etc/php5/apache2/conf.d/curl.ini, /etc/php5/apache2/conf.d/gd.ini, /etc/php5/apache2/conf.d/memcache.ini, /etc/php5/apache2/conf.d/mssql.ini, /etc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_dblib.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/xsl.ini
PHP API 20090626
PHP Extension 20090626
Zend Extension 220090626
Zend Extension Build API220090626,NTS
PHP Extension Build API20090626,NTS
Debug Build no
Thread Safety disabled
Zend Memory Manager enabled
Zend Multibyte Support disabled
IPv6 Support enabled
Registered PHP Streams https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, zip, phar, translations, public, temporary
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls
Registered Stream Filters zlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk

Suhosin logo This server is protected with the Suhosin Patch 0.9.10
Copyright (c) 2006-2007 Hardened-PHP Project Copyright (c) 2007-2009 SektionEins GmbH

Zend logo This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies


PHP Credits


Configuration

apache2handler

Apache Version Apache/2.2.22 (Ubuntu)
Apache API Version 20051115
Server Administrator flm@xtech.ru
Hostname:Port ershov.iis.nsk.su:0
User/Group www-data(33)/33
Max Requests Per Child: 0 - Keep Alive: on - Max Per Connection: 100
Timeouts Connection: 300 - Keep-Alive: 5
Virtual Server Yes
Server Root /etc/apache2
Loaded Modules core mod_log_config mod_logio prefork http_core mod_so mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_deflate mod_dir mod_env mod_expires mod_headers mod_mime mod_negotiation mod_php5 mod_proxy mod_proxy_html mod_proxy_http mod_reqtimeout mod_rewrite mod_setenvif mod_status

DirectiveLocal ValueMaster Value
engine11
last_modified00
xbithack00

Apache Environment

VariableValue
REDIRECT_protossl no value
REDIRECT_HTTP_AUTHORIZATION no value
REDIRECT_STATUS 200
protossl no value
HTTP_AUTHORIZATION no value
HTTP_HOST ershov.iis.nsk.su
HTTP_USER_AGENT Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)
HTTP_ACCEPT */*
HTTP_ACCEPT_LANGUAGE ru,by;q=0.7,en;q=0.7,kz;q=0.7,ua;q=0.7,*;q=0.1
HTTP_ACCEPT_ENCODING gzip, deflate
HTTP_REFERER http://ershov.iis.nsk.su/archive/eaimage.asp?did=7639&fileid=114484&lang=1
HTTP_CONNECTION close
PATH /usr/local/bin:/usr/bin:/bin
SERVER_SIGNATURE <address>Apache/2.2.22 (Ubuntu) Server at ershov.iis.nsk.su Port 80</address>
SERVER_SOFTWARE Apache/2.2.22 (Ubuntu)
SERVER_NAME ershov.iis.nsk.su
SERVER_ADDR 84.237.72.38
SERVER_PORT 80
REMOTE_ADDR 217.69.133.12
DOCUMENT_ROOT /var/www/ershov
SERVER_ADMIN flm@xtech.ru
SCRIPT_FILENAME /var/www/ershov/index.php
REMOTE_PORT 51454
REDIRECT_URL /ru/node/
GATEWAY_INTERFACE CGI/1.1
SERVER_PROTOCOL HTTP/1.1
REQUEST_METHOD GET
QUERY_STRING no value
REQUEST_URI /ru/node/
SCRIPT_NAME /index.php

HTTP Headers Information

HTTP Request Headers
HTTP Request GET /ru/node/ HTTP/1.1
Host ershov.iis.nsk.su
User-Agent Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)
Accept */*
Accept-Language ru,by;q=0.7,en;q=0.7,kz;q=0.7,ua;q=0.7,*;q=0.1
Accept-Encoding gzip, deflate
Referer http://ershov.iis.nsk.su/archive/eaimage.asp?did=7639&fileid=114484&lang=1
Connection close
HTTP Response Headers
X-Powered-By PHP/5.3.10-1ubuntu3
X-Drupal-Cache MISS
Expires Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control no-cache, must-revalidate
X-Content-Type-Options nosniff

apc

APC Supportenabled
Version 3.1.7
APC Debugging Disabled
MMAP Support Enabled
MMAP File Mask no value
Locking type pthread mutex Locks
Serialization Support php
Revision $Revision: 307215 $
Build Date May 2 2011 19:00:42

DirectiveLocal ValueMaster Value
apc.cache_by_defaultOnOn
apc.canonicalizeOnOn
apc.coredump_unmapOffOff
apc.enable_cliOffOff
apc.enabledOnOn
apc.file_md5OffOff
apc.file_update_protection22
apc.filtersno valueno value
apc.gc_ttl36003600
apc.include_once_overrideOffOff
apc.lazy_classesOffOff
apc.lazy_functionsOffOff
apc.max_file_size1M1M
apc.mmap_file_maskno valueno value
apc.num_files_hint10001000
apc.preload_pathno valueno value
apc.report_autofilterOffOff
apc.rfc1867OffOff
apc.rfc1867_freq00
apc.rfc1867_nameAPC_UPLOAD_PROGRESSAPC_UPLOAD_PROGRESS
apc.rfc1867_prefixupload_upload_
apc.rfc1867_ttl36003600
apc.serializerdefaultdefault
apc.shm_segments11
apc.shm_size32M32M
apc.slam_defenseOnOn
apc.statOnOn
apc.stat_ctimeOffOff
apc.ttl00
apc.use_request_timeOnOn
apc.user_entries_hint40964096
apc.user_ttl00
apc.write_lockOnOn

bcmath

BCMath support enabled

DirectiveLocal ValueMaster Value
bcmath.scale00

bz2

BZip2 Support Enabled
Stream Wrapper support compress.bzip2://
Stream Filter support bzip2.decompress, bzip2.compress
BZip2 Version 1.0.6, 6-Sept-2010

calendar

Calendar support enabled

Core

PHP Version 5.3.10-1ubuntu3

DirectiveLocal ValueMaster Value
allow_call_time_pass_referenceOffOff
allow_url_fopenOnOn
allow_url_includeOffOff
always_populate_raw_post_dataOffOff
arg_separator.input&&
arg_separator.output&&
asp_tagsOffOff
auto_append_fileno valueno value
auto_globals_jitOnOn
auto_prepend_fileno valueno value
browscapno valueno value
default_charsetno valueno value
default_mimetypetext/htmltext/html
define_syslog_variablesOffOff
disable_classesno valueno value
disable_functionspcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
display_errorsOffOff
display_startup_errorsOffOff
doc_rootno valueno value
docref_extno valueno value
docref_rootno valueno value
enable_dlOffOff
error_append_stringno valueno value
error_logno valueno value
error_prepend_stringno valueno value
error_reporting3071922527
exit_on_timeoutOffOff
expose_phpOnOn
extension_dir/usr/lib/php5/20090626/usr/lib/php5/20090626
file_uploadsOnOn
highlight.bg#FFFFFF#FFFFFF
highlight.comment#FF8000#FF8000
highlight.default#0000BB#0000BB
highlight.html#000000#000000
highlight.keyword#007700#007700
highlight.string#DD0000#DD0000
html_errorsOffOff
ignore_repeated_errorsOffOff
ignore_repeated_sourceOffOff
ignore_user_abortOffOff
implicit_flushOffOff
include_path.:/usr/share/php:/usr/share/pear.:/usr/share/php:/usr/share/pear
log_errorsOnOn
log_errors_max_len10241024
magic_quotes_gpcOffOff
magic_quotes_runtimeOffOff
magic_quotes_sybaseOffOff
mail.add_x_headerOnOn
mail.force_extra_parametersno valueno value
mail.logno valueno value
max_execution_time3030
max_file_uploads2020
max_input_nesting_level6464
max_input_time6060
max_input_vars10001000
memory_limit2048M128M
open_basedirno valueno value
output_buffering40964096
output_handlerno valueno value
post_max_size32M32M
precision1414
realpath_cache_size16K16K
realpath_cache_ttl120120
register_argc_argvOffOff
register_globalsOffOff
register_long_arraysOffOff
report_memleaksOnOn
report_zend_debugOnOn
request_orderGPGP
safe_modeOffOff
safe_mode_exec_dirno valueno value
safe_mode_gidOffOff
safe_mode_include_dirno valueno value
sendmail_fromno valueno value
sendmail_path/usr/sbin/sendmail -t -i /usr/sbin/sendmail -t -i 
serialize_precision1717
short_open_tagOnOn
SMTPlocalhostlocalhost
smtp_port2525
sql.safe_modeOffOff
track_errorsOffOff
unserialize_callback_funcno valueno value
upload_max_filesize32M32M
upload_tmp_dirno valueno value
user_dirno valueno value
user_ini.cache_ttl300300
user_ini.filename.user.ini.user.ini
variables_orderGPCSGPCS
xmlrpc_error_number00
xmlrpc_errorsOffOff
y2k_complianceOnOn
zend.enable_gcOnOn

ctype

ctype functions enabled

curl

cURL support enabled
cURL Information 7.22.0
Age 3
Features
AsynchDNS No
Debug No
GSS-Negotiate Yes
IDN Yes
IPv6 Yes
Largefile Yes
NTLM Yes
SPNEGO No
SSL Yes
SSPI No
krb4 No
libz Yes
CharConv No
Protocols dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtmp, rtsp, smtp, smtps, telnet, tftp
Host x86_64-pc-linux-gnu
SSL Version OpenSSL/1.0.1
ZLib Version 1.2.3.4

date

date/time support enabled
"Olson" Timezone Database Version 0.system
Timezone Database internal
Default timezone Asia/Novosibirsk

DirectiveLocal ValueMaster Value
date.default_latitude31.766731.7667
date.default_longitude35.233335.2333
date.sunrise_zenith90.58333390.583333
date.sunset_zenith90.58333390.583333
date.timezoneno valueno value

dba

DBA support enabled
Supported handlers cdb cdb_make db4 inifile flatfile

DirectiveLocal ValueMaster Value
dba.default_handlerflatfileflatfile

dom

DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.7.8
HTML Support enabled
XPath Support enabled
XPointer Support enabled
Schema Support enabled
RelaxNG Support enabled

ereg

Regex Library Bundled library enabled

exif

EXIF Support enabled
EXIF Version 1.4 $Id: exif.c 321634 2012-01-01 13:15:04Z felipe $
Supported EXIF Version 0220
Supported filetypes JPEG,TIFF

DirectiveLocal ValueMaster Value
exif.decode_jis_intelJISJIS
exif.decode_jis_motorolaJISJIS
exif.decode_unicode_intelUCS-2LEUCS-2LE
exif.decode_unicode_motorolaUCS-2BEUCS-2BE
exif.encode_jisno valueno value
exif.encode_unicodeISO-8859-15ISO-8859-15

fileinfo

fileinfo supportenabled
version 1.0.5-dev

filter

Input Validation and Filtering enabled
Revision $Revision: 321634 $

DirectiveLocal ValueMaster Value
filter.defaultunsafe_rawunsafe_raw
filter.default_flagsno valueno value

ftp

FTP support enabled

gd

GD Support enabled
GD Version 2.0
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.4.8
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
libJPEG Version unknown
PNG Support enabled
libPNG Version 1.2.46
WBMP Support enabled

DirectiveLocal ValueMaster Value
gd.jpeg_ignore_warning00

gettext

GetText Support enabled

hash

hash support enabled
Hashing Engines md2 md4 md5 sha1 sha224 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost adler32 crc32 crc32b salsa10 salsa20 haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5

iconv

iconv support enabled
iconv implementation glibc
iconv library version 2.15

DirectiveLocal ValueMaster Value
iconv.input_encodingISO-8859-1ISO-8859-1
iconv.internal_encodingISO-8859-1ISO-8859-1
iconv.output_encodingISO-8859-1ISO-8859-1

json

json support enabled
json version 1.2.1

libxml

libXML support active
libXML Compiled Version 2.7.8
libXML Loaded Version 20708
libXML streams enabled

mbstring

Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation disabled

mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) backtrack check On
Multibyte regex (oniguruma) version 4.7.1

DirectiveLocal ValueMaster Value
mbstring.detect_orderno valueno value
mbstring.encoding_translationOffOff
mbstring.func_overload00
mbstring.http_inputpasspass
mbstring.http_outputpasspass
mbstring.http_output_conv_mimetypes^(text/|application/xhtml\+xml)^(text/|application/xhtml\+xml)
mbstring.internal_encodingno valueno value
mbstring.languageunineutral
mbstring.strict_detectionOffOff
mbstring.substitute_characterno valueno value

memcache

memcache supportenabled
Version 3.0.6
Revision $Revision: 310129 $

DirectiveLocal ValueMaster Value
memcache.allow_failover11
memcache.chunk_size3276832768
memcache.compress_threshold2000020000
memcache.default_port1121111211
memcache.hash_functioncrc32crc32
memcache.hash_strategyconsistentconsistent
memcache.lock_timeout1515
memcache.max_failover_attempts2020
memcache.protocolasciiascii
memcache.redundancy11
memcache.session_redundancy22

mhash

MHASH support Enabled
MHASH API Version Emulated Support

mssql

MSSQL Supportenabled
Active Persistent Links 0
Active Links 0
Library version FreeTDS

DirectiveLocal ValueMaster Value
mssql.allow_persistentOnOn
mssql.batchsize00
mssql.charsetno valueno value
mssql.compatability_modeOffOff
mssql.connect_timeout55
mssql.datetimeconvertOnOn
mssql.max_linksUnlimitedUnlimited
mssql.max_persistentUnlimitedUnlimited
mssql.max_procsUnlimitedUnlimited
mssql.min_error_severity1010
mssql.min_message_severity1010
mssql.secure_connectionOffOff
mssql.textlimitServer defaultServer default
mssql.textsizeServer defaultServer default
mssql.timeout6060

mysql

MySQL Supportenabled
Active Persistent Links 0
Active Links 0
Client API version 5.5.54
MYSQL_MODULE_TYPE external
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_INCLUDE -I/usr/include/mysql
MYSQL_LIBS -L/usr/lib/x86_64-linux-gnu -lmysqlclient_r

DirectiveLocal ValueMaster Value
mysql.allow_local_infileOnOn
mysql.allow_persistentOnOn
mysql.connect_timeout6060
mysql.default_hostno valueno value
mysql.default_passwordno valueno value
mysql.default_portno valueno value
mysql.default_socket/var/run/mysqld/mysqld.sock/var/run/mysqld/mysqld.sock
mysql.default_userno valueno value
mysql.max_linksUnlimitedUnlimited
mysql.max_persistentUnlimitedUnlimited
mysql.trace_modeOffOff

mysqli

MysqlI Supportenabled
Client API library version 5.5.54
Active Persistent Links 0
Inactive Persistent Links 0
Active Links 0
Client API header version 5.5.22
MYSQLI_SOCKET /var/run/mysqld/mysqld.sock

DirectiveLocal ValueMaster Value
mysqli.allow_local_infileOnOn
mysqli.allow_persistentOnOn
mysqli.default_hostno valueno value
mysqli.default_port33063306
mysqli.default_pwno valueno value
mysqli.default_socket/var/run/mysqld/mysqld.sock/var/run/mysqld/mysqld.sock
mysqli.default_userno valueno value
mysqli.max_linksUnlimitedUnlimited
mysqli.max_persistentUnlimitedUnlimited
mysqli.reconnectOffOff

openssl

OpenSSL support enabled
OpenSSL Library Version OpenSSL 1.0.1 14 Mar 2012
OpenSSL Header Version OpenSSL 1.0.1 14 Mar 2012

pcre

PCRE (Perl Compatible Regular Expressions) Support enabled
PCRE Library Version 8.12 2011-01-15

DirectiveLocal ValueMaster Value
pcre.backtrack_limit10000001000000
pcre.recursion_limit100000100000

PDO

PDO supportenabled
PDO drivers dblib, mysql

pdo_dblib

PDO Driver for FreeTDS/Sybase DB-libenabled
Flavour freetds

pdo_mysql

PDO Driver for MySQLenabled
Client API version 5.5.54

DirectiveLocal ValueMaster Value
pdo_mysql.default_socket/var/run/mysqld/mysqld.sock/var/run/mysqld/mysqld.sock

Phar

Phar: PHP Archive supportenabled
Phar EXT version 2.0.1
Phar API version 1.1.1
SVN revision $Revision: 321634 $
Phar-based phar archives enabled
Tar-based phar archives enabled
ZIP-based phar archives enabled
gzip compression enabled
bzip2 compression enabled
Native OpenSSL support enabled

Phar based on pear/PHP_Archive, original concept by Davey Shafik.
Phar fully realized by Gregory Beaver and Marcus Boerger.
Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle.

DirectiveLocal ValueMaster Value
phar.cache_listno valueno value
phar.readonlyOnOn
phar.require_hashOnOn

posix

Revision $Revision: 321634 $

Reflection

Reflectionenabled
Version $Revision: 321634 $

session

Session Support enabled
Registered save handlers files user memcache
Registered serializer handlers php php_binary wddx

DirectiveLocal ValueMaster Value
session.auto_startOffOff
session.bug_compat_42OffOff
session.bug_compat_warnOffOff
session.cache_expire180180
session.cache_limiterno valuenocache
session.cookie_domain.ershov.iis.nsk.suno value
session.cookie_httponlyOnOff
session.cookie_lifetime20000000
session.cookie_path//
session.cookie_secureOffOff
session.entropy_fileno valueno value
session.entropy_length00
session.gc_divisor1001000
session.gc_maxlifetime2000001440
session.gc_probability10
session.hash_bits_per_character55
session.hash_function00
session.nameSESS808e619c4121c0121b8d9e07b45f61d0PHPSESSID
session.referer_checkno valueno value
session.save_handleruserfiles
session.save_path/var/lib/php5/var/lib/php5
session.serialize_handlerphpphp
session.use_cookiesOnOn
session.use_only_cookiesOnOn
session.use_trans_sid00

shmop

shmop support enabled

SimpleXML

Simplexml supportenabled
Revision $Revision: 321634 $
Schema support enabled

soap

Soap Client enabled
Soap Server enabled

DirectiveLocal ValueMaster Value
soap.wsdl_cache11
soap.wsdl_cache_dir/tmp/tmp
soap.wsdl_cache_enabled11
soap.wsdl_cache_limit55
soap.wsdl_cache_ttl8640086400

sockets

Sockets Support enabled

SPL

SPL supportenabled
Interfaces Countable, OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
Classes AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

standard

Dynamic Library Support enabled
Path to sendmail /usr/sbin/sendmail -t -i

DirectiveLocal ValueMaster Value
assert.active11
assert.bail00
assert.callbackno valueno value
assert.quiet_eval00
assert.warning11
auto_detect_line_endings00
default_socket_timeout6060
fromno valueno value
safe_mode_allowed_env_varsPHP_PHP_
safe_mode_protected_env_varsLD_LIBRARY_PATHLD_LIBRARY_PATH
url_rewriter.tagsa=href,area=href,frame=src,input=src,form=fakeentrya=href,area=href,frame=src,input=src,form=fakeentry
user_agentno valueno value

sysvmsg

sysvmsg support enabled
Revision $Revision: 321634 $

tokenizer

Tokenizer Support enabled

wddx

WDDX Supportenabled
WDDX Session Serializer enabled

xml

XML Support active
XML Namespace Support active
libxml2 Version 2.7.8

xmlreader

XMLReader enabled

xmlwriter

XMLWriter enabled

xsl

XSL enabled
libxslt Version 1.1.26
libxslt compiled against libxml Version 2.7.8
EXSLT enabled
libexslt Version 1.1.26

zip

Zip enabled
Extension Version $Id: php_zip.c 321634 2012-01-01 13:15:04Z felipe $
Zip version 1.9.1
Libzip version 0.9.0

zlib

ZLib Support enabled
Stream Wrapper support compress.zlib://
Stream Filter support zlib.inflate, zlib.deflate
Compiled Version 1.2.1.1
Linked Version 1.2.3.4

DirectiveLocal ValueMaster Value
zlib.output_compressionOffOff
zlib.output_compression_level-1-1
zlib.output_handlerno valueno value

Additional Modules

Module Name
sysvsem
sysvshm

Environment

VariableValue
APACHE_RUN_DIR /var/run/apache2
APACHE_PID_FILE /var/run/apache2.pid
PATH /usr/local/bin:/usr/bin:/bin
APACHE_LOCK_DIR /var/lock/apache2
LANG C
APACHE_RUN_USER www-data
APACHE_RUN_GROUP www-data
APACHE_LOG_DIR /var/log/apache2
PWD /etc/apache2/sites-available

PHP Variables

VariableValue
_GET["q"]node
_SERVER["REDIRECT_protossl"]no value
_SERVER["REDIRECT_HTTP_AUTHORIZATION"]no value
_SERVER["REDIRECT_STATUS"]200
_SERVER["protossl"]no value
_SERVER["HTTP_AUTHORIZATION"]no value
_SERVER["HTTP_HOST"]ershov.iis.nsk.su
_SERVER["HTTP_USER_AGENT"]Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)
_SERVER["HTTP_ACCEPT"]*/*
_SERVER["HTTP_ACCEPT_LANGUAGE"]ru,by;q=0.7,en;q=0.7,kz;q=0.7,ua;q=0.7,*;q=0.1
_SERVER["HTTP_ACCEPT_ENCODING"]gzip, deflate
_SERVER["HTTP_REFERER"]http://ershov.iis.nsk.su/archive/eaimage.asp?did=7639&fileid=114484&lang=1
_SERVER["HTTP_CONNECTION"]close
_SERVER["PATH"]/usr/local/bin:/usr/bin:/bin
_SERVER["SERVER_SIGNATURE"]<address>Apache/2.2.22 (Ubuntu) Server at ershov.iis.nsk.su Port 80</address>
_SERVER["SERVER_SOFTWARE"]Apache/2.2.22 (Ubuntu)
_SERVER["SERVER_NAME"]ershov.iis.nsk.su
_SERVER["SERVER_ADDR"]84.237.72.38
_SERVER["SERVER_PORT"]80
_SERVER["REMOTE_ADDR"]217.69.133.12
_SERVER["DOCUMENT_ROOT"]/var/www/ershov
_SERVER["SERVER_ADMIN"]flm@xtech.ru
_SERVER["SCRIPT_FILENAME"]/var/www/ershov/index.php
_SERVER["REMOTE_PORT"]51454
_SERVER["REDIRECT_URL"]/ru/node/
_SERVER["GATEWAY_INTERFACE"]CGI/1.1
_SERVER["SERVER_PROTOCOL"]HTTP/1.1
_SERVER["REQUEST_METHOD"]GET
_SERVER["QUERY_STRING"]no value
_SERVER["REQUEST_URI"]/ru/node/
_SERVER["SCRIPT_NAME"]/index.php
_SERVER["PHP_SELF"]/index.php
_SERVER["REQUEST_TIME"]1490798218

PHP License

This program is free software; you can redistribute it and/or modify it under the terms of the PHP License as published by the PHP Group and included in the distribution in the file: LICENSE

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

If you did not receive a copy of the PHP license, or have any questions about PHP licensing, please contact license@php.net.


1

Дональд Кнут рассказывает о международном симпозиуме в Ургенче «Алгоритм в современной математике и ее приложениях», сентябрь 1979 г.
Источник: http://www.webofstories.com/play/donald.knuth/

Назад к находкам архивариуса

Препринт №13 ВЦ СО АН СССР
Новосибирск 1976

Р е з ю м е

Данная работа завершает исследование становления программирования в СССР, содержащееся в препринте этих же авторов "Становление программирования в СССР (начальное развитие)" ВЦ СО АН СССР, 1976 г.

Авторы подчеркивают роль Алгола 60 в интернационализации научных исследований в области программирования и придании им общезначимого характера. В заключение авторы дают критический анализ предмета, обсуждая причины ряда пробелов в развитии программирования в СССР.

В конце приводится библиография источников, использованных в обеих частях исследования.

Исследование подготовлено для трудов международной научной конференции по истории вычислительного дела, состоявшейся в Лос-Аламосе (США) с 10 по 15 июня 1976 года.

1. Новые рубежи (1959-1963)


В течение 6-й пятилетки в пределах доступных ресурсов проходила интенсивная работа по конструированию ЭВМ. В дополнение к первым ЭВМ (Таблица 1) появилось еще, по крайней мере, 8 типов ЭВМ, даже не считая воспроизведений по документации (см. Таблицу 3). За исключением Урала 2 и М-20, роль остальных разработок была промежуточной. Одни были индивидуальными разработками типа "сделай сам" (ГИФТИ, ЦЭМ-1), другие были промежуточным этапом в поисках основного направления разработок (Киев), третьи - экспериментального характера (Сетунь). В основном же, если не считать попутного освоения ферритовой памяти, эти модели стали своего рода ламповыми прототипами приближающегося поколения полупроводниковых машин.

В ноябре 1959 г. в Москве, в МГУ состоялось "Всесоюзное совещание по вычислительной математике и вычислительной технике". Несмотря на скромное название, это было грандиозное научное собрание с почти 2000 участников и 217 докладами, прочитанными на четырех секциях [44]. К сожалению, организаторам не удалось собрать доклады и издать труды совещания.

На пленарном заседании ШБ и АЕ было поручено выступить с обзорным докладом "Современное состояние автоматизации программирования". Доклад был сделан, однако справедливости ради следует признать, что единого взгляда на проблематику в этот момент выработать не удалось.

К концу 50-х годов у каждого из авторов сложилась своего рода программа деятельности на будущее. Эти взгляды нашли свое частичное выражение в ряде работ, в том числе и среди представленных этому совещанию [45,78]. Дело, однако, не столько в самих работах, сколько в контексте, определявшем подход авторов.

ШБ довелось принять участие в проектировании логической структуры ЭВМ М-20. Надо сказать, что это была одна из немногих моделей ЭВМ, при создании которой объединились проектанты, конструкторы и математики, представленные ИТМ и ВТ, конструкторским бюро, создавшим машину "Стрела", и МИАНом. Эта солидная основа возлагала большую ответственность на разработчиков, поскольку машине, а более точно ее архитектуре, предстояло воплотиться в нескольких крупных сериях (М-20, БЭСМ-3, БЭСМ-3М, БЭСМ-4, М-220, М-220М, М-222). В частности, масштабы использования средств программирования возрастали неизмеримо, и сложившиеся прецеденты накопления натурального программного хозяйства, еще как-то приемлемые для уникальных научных вычислительных центров, уже совершенно не годились для будущей машины. Постепенно складывалась концепция математического обеспечения - интегрированной и удобной в работе системы различных средств программирования (библиотеки, трансляторы, средства отладки), сопряженной с определенной дисциплиной прохождения задач на машине. Для ШБ важными предпосылками для формирования философии были экспериментальные системные проекты в Вычислительном центре МГУ ([38], [43]), а также повседневный опыт организации производственных вычислений в МИАН, требовавших большой четкости и высокой надежности работы как оборудования, так и программ.

На пути к полному пониманию проблемы математического обеспечения ЭВМ, не говоря уже о ее решении в сколько-нибудь полном объеме, было много препятствий и научно-технического и организационного характера и, в частности, одно из них - слабая разработанность концепции программного модуля. Опыт работы с машинами "Стрела" отчетливо показал, что дивергенция средств программирования в целом неизбежна, если не будет единой и нерушимой основы, сооружаемой непосредственно на "голой машине". Для М-20 в то время такой вещью была библиотека стандартных подпрограмм. Идея превращения библиотеки в переносимый и общий программный продукт стала для ШБ в это время главной задачей, на решении которой со временем сформировались более общие взгляды на программное обеспечение. ИС-2 стала своего рода мини-ОС, обеспечивающей "в последней инстанции" определенную однородность строения исполняемых программ.

Возвращаясь ко 2-му соавтору пленарного доклада, следует отметить, что АЕ интересовали в то время совершенно другие проблемы. Продолжая работать над трансляторами и их входными языками, он находился в состоянии "научной возгонки", переходя от одной версии к другой в поисках новых идей или углубления во внутреннюю проблематику языков и трансляторов. Сколачивая коллектив системных программистов в организуемом в то время Сибирском отделении АН СССР и переваривая информацию, полученную во время перевода новых (главным образом, американских) работ по автоматизации программирования [72], он стремился увлечь своих новых сотрудников довольно-таки амбициозным проектом "Сибирского языка программирования" [78].

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

Как мы уже упоминали, первое знакомство с проектом западногерманских и американских специалистов состоялось в августе 1958 года, когда А. Перлис привез предварительную версию публикации [71] в СССР. Первыми ее читателями были сотрудники Вычислительного центра АН СССР, работавшие в то время над транслятором ППС [41], и начальная группа сотрудников будущего Вычислительного центра Сибирского отделения АН СССР. Общая схема языка была положена в основу проекта "Сибирского языка" системы программирования для М-20. В то же время стала совершенно очевидной общенаучная ценность этого документа, которая требовала его широкого распространения. Не дожидаясь публикации сборника переводов [72], описание Алгола в переводе АЕ было издано Вычислительным центром и распространено на ноябрьском совещании 1959 года [80].

Тем временем усилия международного коллектива ученых завершились выработкой законченной спецификации нового алгоритмического языка. Редактор "Сообщения об алгоритмическом языке Алгол 60" [81] Петер Наур поддержал контакт с советскими коллегами, что позволило уже в марте 1960 года подготовить для публикации перевод "Сообщения", выполненный Г.И. Кожухиным. Этот перевод был опубликован в мае 1960 г. в издательстве Вычислительного центра АН СССР, а через год - в новом "Журнале вычислительной математики и математической физики" [82].

Ситуация весной 1960 года оказалась весьма благоприятной для Алгола 60 в качестве единого языка программирования научных и инженерных применений ЭВМ. Авторы уже говорили об общих предпосылках к унификации языка. Алгол 60 не только обладал очевидными достоинствами, выдвигая в то же время интересную научную проблему, но и, будучи международным "комитетским" языком, ставил в равную позицию любую индивидуальную оценку языка, отодвигая тем самым на второй план субъективные или "вкусовые" точки зрения. Другим благоприятным моментом было отсутствие инерции, поскольку количество "Стрел" и БЭСМ не шло ни в какое сравнение с потоком выпускаемых машин типа М-20.

В июне 1960 г. в Вычислительном центре АН СССР состоялось координационное совещание по вопросам реализации Алгола 60.На фоне общей и во многом разнонаправленной активности выделились три проекта реализации языка для М-20, руководимые С.С. Лавровым, ШБ и АЕ, получившие, соответственно, названия ТА-1, ТА-2 и Альфа. Начавшись как три независимые и подчас конкурирующие разработки, они в процессе их развития приобрели взаимодополняющие свойства, решив в целом удовлетворительно проблему снабжения М-20 трансляторами с Алгола 60.

ШБ попытался решить проблему унификации конкретного представления, с тем чтобы достичь совместимости трансляторов по входу. К сожалению, технические различия во взглядах возобладали, и в полном объеме решить проблему не удалось. Серьезным препятствием на этом пути стало отсутствие в то время у М-20 стандартного буквенно-цифрового оборудования для ввода и вывода, что побудило разработчиков и пользователей временно решать эту проблему каждый по-своему. Кроме того, разгон, взятый АЕ в разработке "Сибирского языка", оказался слишком велик, чтобы остаться в рамках Алгола 60. Проект был адаптирован таким образом, чтобы стать расширением Алгола 60, и в таковом качестве он получил название "Входного языка" [83], а в его конкретным представлении - Альфа-языка. Наиболее существенным расширением было введение комплексных и многомерных величин в качестве аргументов и результатов основных операций, а также операций формирования и членения таких величин.

В то же время все три транслятора базировались на системе ИС-2 для обращения к стандартным подпрограммам.

22-24 декабря 1960 г. в МГУ состоялась рабочая конференция "Построение программирующих программ на основе языка АЛГОЛ". К этому времени у разработчиков уже сложились общие подходы к реализации языка и выбору схем трансляции. В ТА-1 благодаря отказу от возможной рекурсивности процедур и ряду других ограничений была выбрана компактная и быстрая схема трансляции без оптимизации. Главной задачей ТА-2 стала реализация практически полного языка без существенной потери в качестве реализации. В разработке системы Альфа было поставлено в качестве главной цели обеспечение высокого качества рабочих программ с сохранением приемлемой скорости трансляции ([92], стр. 264). В докладе разработчиков системы Альфа был создан, можно сказать, классический прецедент просчета в определении плановых показателей больших программных работ с универсальным коэффициентом недооценки 2-3, подтвержденном впоследствии многими проектами: авторы клали на разработку системы 15 человеко-лет для построения 15 000 команд, затратив на самом деле свыше 30 человеко-лет и соорудив систему в 45 000 команд ([92], стр. 64).

В дальнейшем на технические решения разработчиков оказали существенное влияние материалы проходившей почти одновременно в США конференции по методам трансляции с Алгола 60, многие доклады которой были опубликованы в одном из самых известных среди системных программистов выпусков журнала "Эй-Си-Эм Коммьюникейшнз" [84].

Общественное признание Алгола 60 нашло свое выражение в приглашенном обзорном докладе ШБ и АЕ "Машинные языки и автоматическое программирование", с которым они выступили на пленарном заседании 4-го Всесоюзного математического съезда, состоявшегося в Ленинграде в июле 1961 г. [85]. Авторам кажется уместным привести из него некоторые выдержки:

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

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

"... Надо сказать, что в настоящее время работа по созданию универсального языка (прежде всего для описания алгоритмов численного анализа) продвинута в значительной степени благодаря инициативе и деятельности ряда западноевропейских и американских ученых. Результатом этой работы и обсуждений, проводившихся в течение почти полутора лет, явился проект международного языка программирования, известный под названием АЛГОЛ-60."

"... Все эти стороны АЛГОЛа - возможность ступенчатого расчленения алгоритма на части, установление контекста для того или иного понимания употребляемых обозначений, возможность введения произвольных функциональных обозначений : - в значительной степени приближают АЛГОЛ к общеупотребительному языку "математического описания" вычислительного процесса."

Параллельно работам по Алголу 60 развивались события, приведшие к организации ассоциации пользователей ЭВМ М-20. Уже на июньское совещание по Алголу 60 были приглашены представители организаций, использующих М-20, для того чтобы решить вопросы реализации с учетом общественного мнения пользователей. На декабрьской конференции 1960 г. по реализации Алгола 60 среди участников была распространена информация о предстоящем учредительном собрании членов ассоциации, которое состоялось в начале 1961 года. ШБ был избран председателем совета ассоциации.

В июле 1961 года ассоциация решением Президиума Академии наук СССР получила статус юридического лица и официальное название "Комиссия по эксплуатации вычислительных машин М-20". Вот выдержки из первого положения этой Комиссии:

"... Комиссия по эксплуатации вычислительных машин М-20 : является межведомственным координирующим органом в области эффективной эксплуатации вычислительных машин М-20.

"... Для выполнения указанной задачи Комиссия:


а) организует регулярный обмен информацией по эксплуатации машин участникам комиссии и вырабатывает рекомендации по эксплуатации машин, организует консультации по соответствующим вопросам;
б) вырабатывает единый язык программирования и организует обмен программами и алгоритмами;
в) организует работу по созданию стандартных программ, координируя работы, проводимые в организациях членами Комиссии;
г) проводит работы по автоматизации программирования на М-20;
д) организует конференции, посвященные вопросам эксплуатации машин М-20."

Деятельность Комиссии была важна не только созданием прецедента, за которым последовало создание аналогичных ассоциаций для БЭСМ-2, для серии "Урал", а чуть позже - для серии "Минск", но и ускорением разработки концепции математического обеспечения - слова, вошедшего в употребление в 1963 году. Несколько забегая вперед, заметим, что библиотека программ ИС-2, трансляторы ТА-1 и ТА-2 стали первыми образцами программного продукта, которые поставлялись вместе с оборудованием заводом-изготовителем, образуя интегрированную систему программирования.

Тем временем приближалась к концу разработка трансляторов с Алгола. Отчетные публикации появились для ТА-1 и ТА-2 в начале 1964 г. [86, 87], для системы Альфа - годом позже [88, 89].

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

В трансляторе ТА-1 была реализована разработанная Г.М. Заикиной и С.С. Лавровым общая схема программирования выражений с помощью стека, использующая трактовку знака операций как обобщенных парных ограничителей и разделителей [86].

В трансляторе ТА-2, как авторы уже отмечали, был реализован практически полный Алгол 60, впервые был систематически применен метод таблично-управляемой генерации машинных конструкций операторов языка, реализован новый алгоритм реализации рекурсивных процедур, не требующий размножения "санков" [90]; в пределах, допустимых оборудованием М-20, было реализовано поле "математической памяти" со сплошной адресацией, включая как оперативную, так и внешнюю памяти [91].

В трансляторе Альфа была систематически применена функция расстановки для ускорения работы транслятора ([92], стр. 35), в частности, для экономии совпадающих выражений ([92], стр. 187), применена многовариантная система программирования процедур ([92], стр.92) и циклов ([92], стр. 153), основанная на анализе структуры программы; реализована глобальная экономия памяти ([92], стр. 201), основанная на теории, разработанной С.С. Лавровым [109] и АЕ [110], а также осуществлен ряд других оптимизационных преобразований на уровне промежуточного языка, в частности, объединение циклов с одинаковыми заголовками ([92], стр. 112) и чистка циклов ([92], стр.153).

Научные итоги разработки трансляторов были подведены на 2-й региональной конференции социалистических стран, состоявшейся в Киеве летом 1963 г., и на конференции ассоциации пользователей М-20, состоявшейся в Новосибирске в январе 1964 г. Последняя запомнилась участникам горячими дискуссиями и трескучими морозами ниже -40°С. На конференции в Киеве были заложены основы распространения координации работ по программированию на уровень международного сотрудничества. В дальнейшем была создана рабочая группа ГАМС, выработавшая проект международного стандарта на подмножество Алгола 60, известное под названием АЛГАМС [93].

В 1963 г. в Вычислительном центре Сибирского отделения АН СССР состоялись первые эксперименты, выполненные С.П. Суржиковым, по автоматизации пакетной обработки программ с формированием пакета на перфокартах. Для этих целей была несколько модифицирована ЭВМ М-20 путем добавления системы прерывания и небольшого процессора ввода-вывода. Это был один из немногих прототипов однопрограммной операционной системы для пакетной обработки, реализованный на ЭВМ 1-го поколения. Впоследствии эта работа легла в основу одной из модернизаций М-20, приведшей к модели М-222 [94].

Появление ЭВМ 2-го поколения (Минск 2, Раздан 2, БЭСМ-3, М-220, БЭСМ-6, Днепр и др.) в целом опередило созревание концепции математического обеспечения и идентификацию системного программирования. Предпосылки к исправлению положения сложились, однако, именно в этот период 1959-1963 годов. Начиная с 1964 года, разработка математического обеспечения стала элементом государственной технической политики. Государственный комитет по науке и технике стал одновременно и координатором работ по математическому обеспечению существующих машин и генеральным заказчиком промышленности на математическое обеспечение вновь создаваемых ЭВМ. Ассоциации пользователей ЭВМ активно представляли научно-техническое общественное мнение и играли существенную роль в распространении новых программ. Апробация новых систем программирования, а впоследствии и операционных систем, проводилась междуведомственной комиссией по математическому обеспечению под председательством академика А.А. Дородницына и целевыми комиссиями, осуществляющими приемку новых компонент математического обеспечения.

Деятельность рабочей группы ГАМС и некоторых других рабочих групп создала прецеденты международного научно-технического сотрудничества, нашедшего впоследствии свое большое развитие в работах по ЕС ЭВМ ("Ряд").

Интенсивная работа над трансляторами с Алгола привела к исчезновению профессии вспомогательного программиста-кодировщика и замене ее на профессионального системного программиста. Снабдив пользователей средствами автоматизации программирования, системные программисты обнаружили себя в роли сапожников, которые ходят без сапог. Все первые трансляторы писались в 8-ричном машинном коде с минимальными средствами автоматизации. Это привело к появлению первых языков системного программирования [95, 96] и первой системе построения трансляторов, основанной на промежуточном машинно-ориентированном языке АЛМО [97]. В 1964 году началось проектирование первых мультипрограммных операционных систем для пакетной обработки с использованием загрузчиков и ассемблеров, работающих в автоматическом режиме с помощью языков управления заданиями. Большую роль в формировании современного взгляда на математическое обеспечение и архитектуру ЭВМ сыграл Конгресс ИФИП 1965 года, когда концепции совместимых серий машин, разделения времени, мини-ЭВМ стали объектом делового интереса советских специалистов. Некоторое представление о спектре советских работ по системному программированию в 60-е годы дает тематическое разбиение 99 докладов, представленных 1-й Всесоюзной конференции по программированию, состоявшейся в Киеве в октябре 1968 года [98]:

  • общие обзоры 3
  • процедурные языки и трансляторы 14
  • коммерческие языки и трансляторы 9
  • операционные системы 14
  • системы разделения времени 2
  • архитектура систем 12
  • технология программирования 12
  • прикладные программы 11
  • теоретическое программирование 22

2. Эволюция образования по программированию


В СССР существует один уровень высшеобразовательной аттестации (дипломированный специалист) и два уровня научных степеней (кандидат наук и доктор наук). Дипломированный специалист выпускается университетами, политехническими (типа технических университетов или технических школ) и специализированными отраслевыми институтами по окончании (обычно) пятилетнего курса (без промежуточной аттестации) и для университетского образования примерно равен магистру наук. Кандидат наук примерно соответствует доктору философии (PhD), а доктор, обычно не имея аналога в западных университетах, по квалификации соответствует "полному" профессору.

Диплом и ученые степени одновременно являются сертификатом определенной "специальности" - некоторой науки, технической дисциплины или профессиональной деятельности.

Министерство высшего образования СССР (для дипломов) и Высшая аттестационная комиссия СССР (для ученых степеней) ведут формальный список таких специальностей. Каждый такой список содержит сейчас порядка сотни позиций. Эти списки в системе образования и научной аттестации играют в СССР важную роль, так как служат средством идентификации и формального признания тех или иных компонент научно-технического прогресса. В частности, каждая образовательная специальность получает право иметь самостоятельный учебный план от первого до выпускного года обучения. Учебный план в своей основной части является обязательным и для каждого вуза утверждается Министерством. Имеется, однако, некоторое количество курсов и семинаров по выбору, которые используются для более конкретной специализации студентов в рамках данной специальности.

В 1952 году в нескольких университетах была открыта в дополнение к существовавшей специальности "математика" новая специальность "вычислительная математика", предназначенная для подготовки специалистов, использующих новую вычислительную технику.

Вот как выглядел учебный план по вычислительной математике МГУ в начале 50-х годов (списан из приложения к диплому АЕ, выпуск 1954 года):

  • Основы марксизма-ленинизма
  • Политическая экономия
  • Диалектический материализм
  • Исторический материализм
  • Иностранный язык (английский)
  • Физическое воспитание и спорт
  • Математический анализ
  • Аналитическая геометрия
  • Высшая алгебра
  • Астрономия
  • Физика
  • Теоретическая механика
  • Дифференциальная геометрия
  • Уравнения математической физики
  • Теория функций комплексного переменного
  • Вариационное исчисление
  • Теория вероятностей и теория ошибок
  • История математики
  • Счетные машины и приборы
  • Радиотехника и электроника
  • Электротехника
  • Теория механизмов и машин
  • Приближенные вычисления
  • Практикум по приближенным вычислениям
  • Номография
  • Черчение
  • Курсовая работа
  • Производственная практика
  • Специальные курсы
    • Принципы программирования
    • Счетно-аналитические машины
    • Математическая логика
  • Специальные семинары
    • Теория релейно-контактных схем
    • Вычислительные методы линейной алгебры
  • Дипломная работа
  • Государственные экзамены
    • Основы марксизма-ленинизма
    • Вычислительная математика

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

Первый учебный курс программирования в СССР был прочитан А.А. Ляпуновым в 1952/1953 учебном году под названием "Принципы программирования". Структура курса складывалась, можно сказать, на глазах студентов. Первая половина весьма тесно следовала книге "Программирование для быстродействующих электронных счетных машин" [23]. В перерыве между первым и вторым семестрами у лектора начали складываться основные подходы к "операторному методу". Вся вторая половина курса - это была по существу совместная работа профессора и студентов по созданию и уточнению символики операторов, используемых при составлении схем программ. Курс читался и воспринимался с большим энтузиазмом, и неслучайно почти половина слушателей, математиков-вычислителей, стали после выпуска профессиональными программистами.

В 1955 году чтение курса программирования в МГУ продолжил ШБ. Через пару лет состав курса стабилизировался. В современных терминах его структура выглядит следующим образом:

  • Архитектура ЭВМ
  • Арифметические основы
  • Ознакомление с системой команд
  • Программирование линейных последовательностей команд
  • Программирование ветвлений
  • Программирование циклов
  • Синтез программы в рамках операторного метода
  • Технология программирования (стилистика, комментарии, блок-схемы, операторные схемы, отладка)
  • Компоненты математического обеспечения (библиотеки, трансляторы, отладочные программы).

В качестве учебной ЭВМ бралась или машина "Стрела" или абстрактная трехадресная ЭВМ.

Первой книгой об ЭВМ, рассчитанной на массового читателя, была уже упоминавшаяся книга А.И. Китова "Электронные цифровые машины", вышедшая в середине 1956 года [33]. Коллеги-профессионалы по выходе иногда критиковали эту книгу за неточности или поверхностное изложение. Однако, перечитав ее почти через 20 лет, авторы должны подтвердить, что это было добросовестное, а, главное, весьма оперативное изложение доступного в то время знания об ЭВМ. Хорошим качеством книги была убедительная и увлекающая свежего читателя демонстрация разнообразной новизны, вносимой ЭВМ в практику человеческой деятельности.

Развитием этой книги, а также конспекта лекций, выпущенного в 1956 году для слушателей Артиллерийской инженерной академии [99], стала книга А.И. Китова и Н.А. Криницкого "Электронные цифровые машины и программирование" [100]. Это была первая книга, официально рекомендованная Министерством высшего образования в качестве учебного пособия, весьма солидного объема в 572 стр. и изданная большим тиражом в 25 000 экземпляров. Книга была весьма богата содержанием, отличалась, правда, некоторой пестротой стиля - от весьма популярного изложения основ до стиля руководств к пользованию транслятором. Методика изложения программирования следовала сложившейся схеме (см. выше), но содержала в дополнение к ней две главы с подробным изложением теории схем программ (главным образом, по Ю.И. Янову) и правил программирования для одной из разновидностей трансляторов (ПП-С) для "Стрелы", сделанной в стиле ПП-2. Одним из любопытных обобщений, с которым будет интересно познакомиться авторам Алгола 68, была возможность использовать операторы присваивания в качестве аргументов отношений в логических условиях, например, допускалась запись ([100], стр. 502):
1. x = t>0 7002, 4005 2. x 2 + y2 = r<5x-z>3 4012, 4015,
которая в современной нотации означает
if (t:=x)>0 then go to L5 else if (r:=x↑2 + y↑2)<5
x-z>3 then go to L12 else go to L15 fi fi

Первым учебником, специально посвященным программированию, была книга киевских авторов Б.В. Гнеденко, В.С. Королюка и Е.Л. Ющенко "Элементы программирования" [101]. Она использовала для изложения условную ЭВМ и дидактику курса А.А. Ляпунова. Отдельная глава была посвящена символике адресного программирования.

Первой попыткой создать солидный университетский курс программирования, "построенный на современных научных и методических принципах" ([102], стр. 2), была книга Е.А. Жоголева и Н.П. Трифонова "Курс программирования" [102], основанная на опыте чтения лекций по программированию в МГУ. Это был также первый курс, базирующийся на Алголе. Попытка оказалась в целом весьма удачной, и эта книга была основным вузовским учебником по программированию вплоть до появления машин 3-го поколения, издана несколько раз тиражом, приближающимся к 300 тыс. экземпляров. Вот оглавление 1-го издания:

  1. Предмет курса
  2. Позиционные системы счисления
  3. Физические принципы построения АЦВМ
  4. Описание учебной вычислительной машины
  5. Алгоритмы и алгоритмический язык
  6. Программирование простых арифметических выражений
  7. Элементы математической логики и условия
  8. Программирование условий и булевских выражений
  9. Операторы перехода и их программирование
  10. Производные операторы языка АЛГОЛ
  11. Программирование операторов цикла
  12. Процедуры и их реализация на УВМ
  13. Автоматическая модификация команд
  14. Методы определения положения запятой
  15. Вычисление элементарных функций
  16. Ввод и вывод информации
  17. Пульт управления машины. Контроль правильности составленных программ
  18. Уточнение языка АЛГОЛ
  19. Обзор АЦВМ и их классификация
  20. Программирование с использованием библиотеки подпрограмм
  21. Компилирующие и интерпретирующие программы

Модернизированная версия этого учебника еще и сейчас широко используется как материал для общего вводного курса программирования.

В специальности "вычислительная математика" так и сохранилось доминирование общего курса математики и примыкающего к нему курса численных методов. Потребности в специалистах по системному программированию и в усилении подготовки по технологии системного программирования, как для общего математического обеспечения, так и для прикладных пакетов, в особенности, для АСУ, привели к организации в 1969 году новой специальности "прикладная математика" со специализациями "математическое обеспечение" и "применение ЭВМ" (главным образом для университетов и политехнических институтов) и специальности "автоматизированные системы управления" (главным образом для отраслевых институтов). Эта специальность во многом аналогична "информатике" в европейских и "вычислительным наукам" в американских университетах. В 1975 году подготовку по этим специальностям (не считая вечернего обучения) предлагали на 54-х (прикладная математика) и 43-х (АСУ) факультетах с численностью выпуска порядка 5000 человек в год [103].

Вот как выглядит учебный план 1974 года подготовки специалистов по прикладной математике на факультете вычислительной математики и кибернетики МГУ (выпуск - 350 человек, в 12 раз больше, чем в 1954 году):

  • марксистско-ленинская философия
  • политическая экономия
  • научный коммунизм
  • основы научного атеизма
  • советское право
  • иностранный язык
  • физическое воспитание
  • введение в специальность
  • математический анализ
  • алгебра и аналитическая геометрия
  • дифференциальные уравнения
  • физика
  • уравнения математической физики
  • теория вероятностей и математическая статистика
  • дискретная математика
  • вычислительные машины и программирование
  • численные методы
  • теория игр и исследование операций
  • методы решения экстремальных задач
  • математические модели в естествознании и управлении
  • математические модели в экономике
  • практикум работы на ЭВМ
  • основы автоматизированных систем управления
  • методология и история прикладной математики
  • дополнительные главы программирования
  • математическая логика
  • элементы кибернетики
  • спецкурсы
  • спецсеминары
  • учебная практика
  • производственная практика
  • курсовая работа
  • дипломная работа
  • государственные экзамены
    • научный коммунизм
    • математика

Стандартная длительность курса программирования на этой специальности - два года (4 семестра по два часа в неделю, не считая практикума на ЭВМ). Первая часть - основы программирования - напоминает вышеупомянутый курс Е.А. Жоголева и Н.П. Трифонова. Вторая часть - математическое обеспечение ЭВМ - состоит из следующих компонент: модульное программирование; ассемблеры; загрузчики; макроассемблеры и макрогенераторы; типовые структуры данных и работа с ними; современная архитектура ЭВМ; интеграция оборудования и программного обеспечения; системы программирования; пакты прикладных программ; операционные системы; общая организация вычислительного процесса.

Первая, известная авторам диссертация, связанная с использованием ЭВМ, была кандидатская диссертация И.С. Мухина, бывшего в течение многих лет заместителем директора ИТМ и ВТ, посвященная расчетам равноустойчивых грунтовых откосов, защищенная в 1953 году [104]. Проведенные расчеты, выполненные на БЭСМ в 1952 году, требовали решения системы гиперболических уравнений на плоскости. Эта работа открыла поток самых разнообразных прикладных диссертаций, демонстрировавших мощь ЭВМ и необыкновенные, предоставляемые ими, возможности. С самим программированием дело обстояло гораздо сложнее, и прошли годы, прежде чем оно преодолело комплекс неполноценности, а окружающие усмотрели в нем научное содержание.

Кажется, первой попыткой академической трактовки собственно программистских проблем была глава докторской диссертации ШБ, защищенной им в 1953 году и посвященной в целом ошибкам округления. В главе описывалась некоторая систематическая процедура организации двойного счета на ЭВМ для обеспечения надежности вычислений. Несмотря на практичность схемы и актуальность проблемы, эта часть диссертации многими игнорировалась, а некоторыми оспаривалась.

В 1954 году АЕ в своей дипломной работе, посвященной обращению матриц, написал главу, в которой излагалась некоторая общая схема программирования и описывался алгоритм настройки по месту перемещаемой программы. Рецензент, одобрив работу в целом, порекомендовал удалить программистскую главу.

АЕ, уже написав книгу о ПП БЭСМ [39], не счел возможным представить ее в качестве кандидатской диссертации и переключился на подготовку диссертации по операторным алгоритмам [63] как имеющей более "математическое" содержание.

Постепенно начала набирать силу более здравая тоска зрения. На защите на Ученом совете МИАН в 1957 г. первой диссертации собственно по программированию (Э.З. Любимский, "Об автоматизации программирования и методе программирующих программ" [64]), состоялась оживленная "мета"-дискуссия. Диссертант, посвятив основное изложение описанию ПП-2, добавил в диссертацию теоретическую главу, посвященную уже упоминавшемуся выше "параметрическому" виду записи задач для решения на ЭВМ. А.С. Кронрод критиковал диссертанта за "оппортунистический уклон" и настаивал на праве представления к защите сложных системных программ, полагая достаточным свидетельством творческих способностей автора существование и полезную применимость программного продукта самого по себе.

В этом же, 1957 году, состоялась защита кандидатской диссертации Ю.И. Янова [105]. Эта работа, ставшая классической в теоретическом программировании, также получила не столь единодушную поддержку, которой заслуживала.

В следующие два года состоялись защиты кандидатских диссертаций по вопросам программирования, сделанные на материале первых экспериментов по машинному переводу: О.С. Кулагиной, о своего рода специализированном языке программирования задач машинного перевода [106], и Л.Н. Королева, об оптимизации организации и работы со словарем [107].

Л.Н. Королев стал также в 1956 году первым профессором - программистом с самого начала своей профессиональной деятельности. Первая докторская диссертация по программированию была защищена в Киеве Е.Л. Ющенко в 1966 году по материалу разработки трансляторов на основе адресного языка [49].

Первое время все эти диссертации причислялись к существовавшим в то время родственным специальностям: вычислительной математике, счетно-решающим устройствам и т.д. В середине 60-х годов под влиянием серии работ по теоретическому программированию была образована новая специальность "математическая логика и программирование". Употребление слова "программирование" в виде явной конституенты направило на ученые советы поток работ по системному программированию, весьма далеких от математической логики. Совсем недавно, в 1971 году, программисты отмежевались от логиков, образовав собственную специальность "математическое обеспечение вычислительных комплексов и автоматизированных систем управления".

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

В 1955 году в Московском университете при кафедре вычислительной математики работал семинар по смежным вопросам кибернетики и физиологии, который с 1956 года принял название "семинар по кибернетике". АЕ случилось быть первым докладчиком на этом семинаре с рефератом статьи о моделировании процесса выработки условных рефлексов на машине ЭДСАК [108].

Этот семинар носил интердисциплинарный характер и уделял, в частности, немалое внимание неарифметическим применениям ЭВМ. Его работа позволяла посещавшим его программистам вырабатывать более широкий взгляд как на применение ЭВМ, так и на их место в этом процессе. Этот семинар, хотя и в несколько ином стиле, работает в МГУ по-прежнему под руководством членов-корреспондентов АН СССР С.В. Яблонского и О.Б. Лупанова.

С 1956 года в этих же стенах начал работу, которая продолжается и поныне, научный семинар по программированию под руководством Н.П. Трифонова и ШБ. Предназначенный вначале для сотрудников кафедры вычислительной математики и вычислительного центра МГУ, он постепенно приобрел общегородской характер, собирая иногда на заседания по несколько сот человек. Представительный характер его аудитории обеспечивал быструю и эффективную передачу информации в "горячие периоды" появления новых идей или направлений в программировании. К таким моментам активных и плодотворных дискуссий можно было бы отнести период разработки системы программирования для университетской "Стрелы" в 1957-1958 гг., период освоения Алгола в 1960-1961 гг. и - в более позднее время - период работы с БЭСМ-6, а также изучения и выработки концепций операционных систем.

3. Заключение


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

Ряд объективных обстоятельств способствовал тому, что до середины 60-х годов программирование в СССР развивалось до некоторой степени автономно. К этим обстоятельствам относится более позднее начало работ по электронной вычислительной технике (примерный сдвиг - 5 лет); меньшее количество доступных ресурсов, приведшее к не столь широкому размаху работ, как в США или в Англии*); практическое отсутствие импорта вычислительных машин и технологии; языковый барьер и сравнительно менее интенсивные личные контакты; некоторые общие отличия в организации и стиле научных исследований.


*) Годовой объем производства средств вычислительной техники в СССР характеризуется следующими показателями (в млн. руб.): 1940 г. - 0.3; 1945 г. - 0.5; 1950 г. - 2.0; 1955 г. - 15.0; 1960 г. - 79.9; 1965 г. - 245; 1970 г. - 710; 1975 г. - 2917 ([III], стр. 90).

Для специалиста констатация такого факта, одновременно, и извинение, и повышенная ответственность. С одной стороны, нет необходимости оправдываться, например, за отсутствие всех компонент научно-технической деятельности, присущих "общемировой" тенденции. С другой стороны, специалистам не на кого ссылаться, если они не обеспечивают конкретные потребности общества, в котором работают, необходимыми результатами своего труда.

При такой "автономизации" возникает также в ретроспективной оценке вопрос о степени независимости развития и о вкладе в "мировую" науку.

В отношении последнего будет, по-видимому, правильно сказать, что из конкретных научных результатов влияние на общее развитие оказали лишь работы Ю.И. Янова, приведшие к созданию схем программ, и, может быть, какие-нибудь работы по оптимизации трансляции. Более опосредствованный, но представляющийся авторам существенным, вклад в мировую тенденцию внесло широкое распространение Алгола 60 в СССР. Большая же часть других, отмеченных в этой работе, результатов представляет собой переоткрытия или независимые находки, без которых трудно было бы представить полноценное развитие программирования.

Некоторое представление о степени независимости развития может дать анализ терминологии. При выполнении этого исследования авторы выбрали из просмотренной литературы порядка 130 наиболее ходовых терминов по программированию. Почти все из них воспринимаются на слух как "всегда существовавшие". Тем не менее, каждый из них имеет свой источник. Авторы выбрали для каждого из этих терминов ту публикацию на русском языке, в которой этот термин появился впервые. Термин, появившийся в оригинальной работе на русском языке, признается оригинальным, если только работа не содержит явной ссылки на заимствование. Термин, появившийся в переводной работе, признается заимствованным и помечен в нижеприведенном списке знаком "плюс". В ряде случаев оригинальные термины впоследствии были модернизированы или заменены на переводные, которые приводятся в списке в скобках. В квадратных скобках указан источник, а за ним - год публикации.

Базисные программистские термины

  • машинная математика [1] 1946
  • + электронная счетная машина [8] 1948
  • + память [8] 1948
  • + команда [15] 1949
  • + арифметическое устройство [19] 1949
  • + запоминающее устройство [19] 1949
  • + программное управление [19] 1949
  • + регистр [19] 1949
  • + цикл [19] 1949
  • + параметр цикла [19] 1949
  • + устройство управления [17] 1952
  • + внутренняя память [17] 1952
  • + внешняя память [17] 1952
  • + программа [17] 1952
  • + ввод [17] 1952
  • + вывод [17] 1952
  • + сумматор [17] 1952
  • + код операции [17] 1952
  • + адрес [17] 1952
  • + адресная часть [17] 1952
  • + условный переход [17] 1952
  • + безусловный переход [17] 1952
  • + плавающая запятая [17] 1952
  • + фиксированная запятая [17] 1952
  • + быстродействующая вычислительная машина [17] 1952
  • + электронная вычислительная машина [17] 1952
  • + ячейка (памяти) [17] 1952
  • + арифметическая операция [17] 1952
  • + логическая операция [17] 1952
  • + программирование [21] 1952
  • + масштабный множитель [21] 1952
  • индекс-регистр [21] 1952
  • + подпрограмма [23] 1952
  • + главная программа [23] 1952
  • + ветвление [23] 1952
  • + блок-схема [23] 1952
  • рабочая ячейка [23] 1952
  • формирование команды [23] 1952
  • стандартная подпрограмма [23] 1952
  • код /слово/ [23] 1952
  • + замкнутая подпрограмма [27] 1953
  • + открытая подпрограмма [27] 1953
  • + параметры (подпрограммы) [27] 1953
  • + возврат [27] 1953
  • + библиотека подпрограмм [27] 1953
  • + библиотечная программа [27] 1953
  • + компилятор [28.Панов] 1956
  • + интерпретатор [28.Панов] 1956
  • программист [28.ШБ] 1956
  • программная документация [28.ШБ] 1956
  • схема программы [28.1] 1956
  • логическая схема [28.1] 1956
  • схема счета [28.1] 1956
  • оператор [28.1] 1956
  • оператор переадресации [28.1] 1956
  • оператор восстановления [28.1] 1956
  • оператор формирования [28.1] 1956
  • автоматизация программирования [28.2] 1956
  • программирующая программа /транслятор/ [28.2] 1956
  • арифметический оператор /оператор присваивания/ [28.2] 1956
  • логический оператор [28.2] 1956
  • экономия рабочих ячеек [28.2] 1956
  • отладка [28.2] 1956
  • стандартная подсхема /макроопределение/ [28.2] 1956
  • оператор цикла [28.3] 1956
  • переменная команда [28.3] 1956
  • массив [28.3] 1956
  • относительный адрес [28.3] 1956
  • распределение памяти [28.3] 1956
  • справка /дескриптор/ [28.4] 1956
  • прораб [28.4] 1956
  • внешние устройства [33] 1956
  • система команд [33] 1956
  • логическая шкала [33] 1956
  • + символическое кодирование [33] 1956
  • + символический адрес [33] 1956
  • + действительный /абсолютный/ адрес [33] 1956
  • крупноблочное /модульное/ программирование [33] 1956
  • полупрограмма /стек/ [39] 1958
  • экономия команд [39] 1958
  • (глобальный) анализ программы [39] 1958
  • адрес некоторого ранга /косвенный адрес/ [47] 1958
  • граф-схема [62] 1959
  • настройка по месту [44] 1959
  • + алгоритмический язык [80] 1959
  • + пользователь [80] 1959
  • + эталонный язык [80] 1959
  • + конкретное представление [80] 1959
  • + язык публикаций [80] 1959
  • + ограничитель [80] 1959
  • + разделитель [80] 1959
  • + идентификатор [80] 1959
  • + описание [80] 1959
  • + переключатель [80] 1959
  • + тип [80] 1959
  • + выражение [80] 1959
  • + процедура [80] 1959
  • + метка [80] 1959
  • + формальный, фактический параметр [80] 1959
  • + металингвистическая формула [82] 1960
  • + строка [82] 1960
  • + локальные, глобальные величины [82] 1960
  • + условный оператор [82] 1960
  • + вызов процедуры [82] 1960
  • + размерность массива [82] 1960
  • + переменная с индексом [82] 1960
  • + граничные пары [82] 1960
  • + рекурсивные процедуры [82] 1960
  • + псевдокоманда [82] 1961
  • стандартный массив /модуль загрузки/ [43] 1961
  • составляющая программа /ассемблер/ [43] 1961
  • внешний адрес [43] 1961
  • внутренний адрес [43] 1961
  • таблица внешних адресов [43] 1961
  • прокрутка [43] 1961
  • + операторы ввода-вывода [72] 1961
  • + переполнение [72] 1961
  • + формат (вывода) [72] 1961
  • + рабочая машина [72] 1961
  • + выход (из блока) [72] 1961
  • + перемещаемая программа [72] 1961
  • + граф несовместимости [109] 1961
  • экономия памяти [109] 1961
  • маршрут [109] 1961
  • граф переходов [109] 1961
  • справочная /структура файла/ [56] 1962
  • дихотомическая справочная /дерево поиска/ [56] 1962
  • математическое обеспечение 1963*)
  • внутренний язык [88] 1965
  • мультикоманда [88] 1965
  • функция расстановки [88] 1965
  • общий список /куча/ [88] 1965
  • чистка циклов [88] 1965
  • регулярный цикл [88] 1965
  • + динамический массив [88] 1965

*) Первое известное сейчас авторам употребление - в рабочих документах Государственного комитета по науке и технике.

Всего из 135 вошедших в список терминов 79 оказались заимствованными, а 57 - оригинальными.

Оценивая в целом положительно начальный период развития программирования в СССР, авторы в то же время считают необходимым указать на некоторые трудности и пробелы.

Сильным тормозом в развитии и внедрении автоматизации программирования было отсутствие буквенно-цифровых устройств ввода-вывода, которые стали общедоступными только с машинами 2-го поколения. Возникали не только чисто технические трудности, связанные с кодировкой вводимой информации. Это затрудняло внедрение и ослабляло потребность в разработке комфортабельных средств отладки. Сужалась и даже становилась в значительной степени бесполезной методика символического кодирования.

Более косвенным, но зато и более глубоким последствием, стал недостаток внимания к текстовому представлению входных программ для первых трансляторов. Можно сказать, что, в целом, фразовая структура языков программирования ускользнула от внимания разработчиков трансляторов в доалголовский период.

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

Как ни странно, одной из причин более сильной машинной зависимости была трехадресная система команд. При такой системе трехадресная команда часто представляет собой логически законченное действие, "пролезающее" во входной язык.

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

Возвращаясь к устройствам ввода-вывода, можно отметить еще одну погрешность в одном из начальных решений: желание уплотнить формат привело к построчной кодировке машинных слов на карте и к подаче карты в читающее устройство широкой стороной вперед. Это не только затруднило внедрение буквенно-цифровых кодов, но и не давало возможности получить высокую скорость ввода и перфорации. Упущение было ликвидировано только во 2-й половине 60-х годов.

Другим фактором, сузившим фронт работ по программированию, было преобладание научных применений ЭВМ в рассматриваемый период времени. В практике применения ЭВМ отсутствовало понятие массового пользователя. Труд программистов, как ни парадоксально это звучит, еще не был так дефицитен. Не случайно А.И. Китов в своей книге, относящейся к 1956 г., указывает на требуемое число математиков для подготовки задач для одной ЭВМ в 50-150 человек ([33], стр. 26).

Большая часть программистов в СССР была математиками с университетским образованием. При всех положительных сторонах этого обстоятельства следует, однако, отметить, что потребовалось длительное время, пока была осознана и реализована необходимость сбалансировать эту сторону образования воспитанием способности к инженерному стилю работы, столь необходимому в системном программировании.

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

Авторы, тем не менее, надеются, что эта чистосердечная критика не помешает требовательному читателю оформить позитивное заключение о поступательном и в целом плодотворном периоде становления программирования в СССР. Сейчас, на пороге 25-летия с того момента, как неоновые индикаторы на пульте ЭВМ начали в Советском Союзе свой безостановочный бег, "семь дней в неделю, 24 часа в сутки", стократно умноженное новое поколение молодых людей заново переживает острый момент, когда составленная ими программа одухотворяет машину, передавая ей частицу их интеллекта. Этому поколению авторы посвящают свое исследование.

Л и т е р а т у р а

  1. Цикл статей по математической технике. УМН, 1, №5-6 (1946), 3-174. Н.Е. Кобринский и Л.А. Люстерник. Математическая техника (Введение в цикл). И.Н. Янжул. Счетные автоматы и их применение к астрономическим вычислениям. В.М. Прошко. Приборы для определения корней систем линейных уравнений. В. Буш и С. Колдвелл. Новый дифференциальный анализатор (пер. М.Л. Быховского). V. Bush, Eng.D.Sci.D. and S.H. Caldwell, Sc.D. A New Type of Differential Analyzer. Journ. of the Franklin Inst. 240, N 4 (October 1945) (ref. in [1]) М. Борн, Р. Фюртс и Р.В. Принчл. Фотоэлектрический прибор для функционального преобразования Фурье (пер. М.Л. Быховского). A Photo-electric Fourier transformer. Hature, December 22, 1945, 756-757 (ref. in [1]). М.Л. Быховский. Новые американские счетно-аналитические машины. УМН, 2, №2 (1947), 231-234.
  2. Popular Science. Oct. 1944, p. 86 (ref. in [2]).
  3. Popular Science. Apr. 1946, p. 83 (ref. in [2]).
  4. D. Hartrey. The Eniac. An Electronic Calculating Machine. Nature, 157, N 3990, p. 527 (ref. in [2]).
  5. D.R. Hartrey. F.R.S. The ENIAC, an Electronic Computing Machine. Nature, 158, N 4015 (Saturday, October 12, 1946) (ref. in [8]).
  6. Howard H. Aiken, Grace M. Hopper. The Automatic Sequence Controlled Calculator, Electrical Engineering, NN 8,9,10 (1946) (ref. in [9]).
  7. Д.Р. Хартрей. "Эниак" - электронная счетная машина. УМН, 3, №5 (1948), 146-158.
  8. Айкен Х.Х. и Хоппер Г.М. Автоматически управляемая вычислительная машина. УМН, 3, №4 (1948), 119-142.
  9. Theory and Techniques for Design of Electronic Digital Computers (Lectures given at the Moore School, July 8 to August 31, 1946). University of Pennsylvania, Moore School of Electrical Engineering, Philadelphia, 1946. Volumes 1-4, 600 p. (ref. in [20]).
  10. Burks A.W., Goldstine H.H., Neumann J. Preliminary Discussion of the Logical Design of an Electronic Computing Instrument. Institute for Advanced Study, Princeton, N.J., July 1946 (ref. in [17]).
  11. Burks A.W., Goldstine H.H., Neumann J. Report on the Mathematical and Logical Aspects of an Electronic Computing Instrument. Part 1, Ed. 2, Princeton, N.J., 1947 (ref. in [17]).
  12. A.W. Burks, H.H. Goldstine, J. von Neumann. Preliminary Discussion of Logical Design of an Electronic Computing Instrument. 2nd Edition. Princeton, N.J. The Institute for Advanced Study, 1947 (ref. in [19]).
  13. Proceedings of a Symposium on Large-Scale Digital Computing Machinery (held in Harward Computational Laboratory of Harward University, v. 16, Cambrige, Mass., 1948, 302 p.
  14. М.Л. Быховский. Основы электронных математических машин дискретного счета. УМН, 4, №3 (1949), 69-124.
  15. W.W. Stiffler, Ed. High-speed computing devices. By the staff of Engineering Research Associates, Inc., supervised by C.B. Tompkins, J.N. Wakelin. First Edition, 1950 (ref. in [17]).
  16. Быстродействующие вычислительные машины. Перевод с английского под ред. Д.Ю. Панова, ИЛ, М., 1952, 431 стр.
  17. Francis J. Murray. The theory of mathematical machines. Revised edition, 1948 (ref. in [19]).
  18. Ф. Муррей. Теория математических машин. Перевод с английского Л.Е. Садовского, ИЛ, М., 1949, 328 стр.
  19. Rutishauser, H., Speiser, A., und Stiefel, E. Programmgesteuerte digitale Rechengeräte (elektronische Rechenmaschinen). Zeitschrift für angewandte Mathematik und Physik (ZAMP).
    • I. Teil, vol I, N 5 (15.9.1950), 277-297
    • II. Teil, vol I, N 6 (15.11.1950), 339-362
    • III Teil, vol II, N 1 (15.1.1951), 1-25; Schluß, vol II, N 2 (15.3.1951), 63-91.
  20. Рутисхаузер Г., Шпайзер А. и Штифель Э. Электронные счетные машины с программным управлением. Вопросы ракетной техники (Сборники сокращенных переводов иностранной периодической литературы), 1952, вып. 2, 134-163; вып 3, 132-151; вып 4, 140-151; вып 5, 161-174.
  21. "МЭСМ". Энциклопедия кибернетики. "Наукова думка". Киев, 1974, т. 2, стр. 36.
  22. Л.А. Люстерник, А.А. Абрамов, В.И. Шестаков, М.Р. Шура-Бура. Решение математических задач на автоматических цифровых машинах. Программирование для быстродействующих электронных счетных машин. Издательство Академии наук СССР, 1952, 327 стр.
  23. Goldstine, H.H., and von Neumann, J. Planning and Coding for an Electronic Computing Instrument. v. 1 (69 p.), v. 2 (68 p.), v. 3 (23 p.) Institute for Advanced Study, Princeton, N.J. 1947|48 (ref. in [20]).
  24. Wilkes M.V. Programmer Design for High Speed Automatic Calculating Machine. Journ. Sci. Instr., 26 (1949), 217-220 (ref. in [20]).
  25. Maurice V. Wilkes, David J. Wheeler, Stanley Gill. The preparation of program for an electronic digital computer. Cambridge, Mass., 1951 (ref. in [27]).
  26. М. Уилкс, Д. Уилер, С. Гилл. Составление программ для электронных счетных машин. Перевод с английского Н.П. Жидкова, ИЛ, М., 208 стр.
  27. Конференция "Пути развития советского математического машиностроения и приборостроения". Пленарные заседания (132 стр.). Секция универсальных цифровых машин, часть I (230 стр.), часть II (259 стр.), часть III (180 стр.), Москва, 12-17 марта, 1956 г. Напечатано ВИНИТИ по решению оргкомитета конференции.
    • 1) А.А. Ляпунов, Ю.И. Янов. О логических схемах программ, часть III, 5-8.
    • 2) С.С. Камынин, Э.З. Любимский. Автоматизация программирования, 9-17.
    • 3) А.П. Ершов. Программирующая программа для БЭСМ АН СССР, 18-29.
    • 4) Л.В. Канторович, Л.Т. Петрова, М.А. Яковлева. Об одной системе программирования, 30-36.
    Конференция "Пути развития советского математического машиностроения и приборостроения" (программа). Москва, 12-17 марта 1956 г., 8 стр.
  28. XX съезд Коммунистической партии Советского Союза. Стенографический отчет. Т. II. Политиздат, М., 1956.
  29. Быстродействующая вычислительная машина М-2. Под ред. И.С. Брука. ГИТТЛ, М., 1957, 228 стр.
  30. В.В. Белынский, В.М. Долкарт, Б.М. Каган, Г.П. Лопато, Н.Я. Матюхин. Малогабаритная электронная вычислительная машина М-3. Филиал ВИНИТИ, М., 1957, 87 стр.
  31. А.И. Китов. Электронные цифровые машины. Издательство "Советское радио", М., 1956, 276 стр.
  32. С.Д. Погорелый, Л.И. Пшеничный. Организация управления обменом в мини-ЭВМ. Программирование, №1, 1976, 48-52.
  33. Труды третьего всесоюзного математического съезда. Москва, июнь-июль 1956. Том II. Краткое содержание обзорных и секционных докладов. Академия наук СССР, М., 1956.
  34. Сессия Академии наук СССР по научным проблемам автоматизации производства 1956. Пленарные заседания. АН СССР, М,. 1957.
  35. Rochester N., Symbolic Programming. Transactions IRE, EC-2, N 1 (1953), 10-15 (ref in [33]).
  36. Е.А. Жоголев, Г.С. Росляков, Н.П. Трифонов, М.Р. Шура-Бура. Система стандартных подпрограмм. Под ред. М.Р. Шура-Бура. ГИФМЛ, М., 1958, 231 стр.
  37. А.П. Ершов. Программирующая программа для быстродействующей электронной счетной машины. Издательство АН СССР, М,. 1958, 116 стр.
  38. Т.М. Великанова, А.П. Ершов, К.В. Ким, В.М. Курочкин, Ю.А. Олейник-Овод, В.Д. Поддерюгин. Программирующая программа для машины "Стрела". Тезисы докладов совещания по вычислительной математике и применению средств вычислительной техники. Издательство АН Азерб. ССР, Баку, 1958.
  39. А.П. Ершов, К.В. Ким. Программирующая программа для вычислительной машины "Стрела-3" (ППС). Вычислительный центр АН СССР, М,. 1961, 63 стр.

  40. 1) А.А. Ляпунов. О логических схемах программ.
    2) С.С. Камынин, Э.З. Любимский, М.Р. Шура-Бура. Об автоматизации программирования при помощи программирующей программы.
    3) Э.С. Луховицкая. Блок обработки логических условий в ПП-2.
    4) Э.З. Любимский. Арифметический блок в ПП-2.
    5) С.С. Камынин. Блок переадресации в ПП-2.
    6) В.С. Штаркман. Блок экономии рабочих ячеек в ПП-2.

    Проблемы кибернетики. Под ред. А.А. Ляпунова. Выпуск I. ГИФМЛ, М,. 1958, 46-74, 135-189.
  41. Система автоматизации программирования. Сборник работ под редакцией Н.П. Трифонова и М.Р. Шура-Бура. ГИФМЛ, М., 1961, 187 стр. Раздел I. Система программирования с использованием библиотеки подпрограмм, 15-70. Раздел II. Программирующая программа, 71-148. Раздел III. Автоматизация отладки программ и контроля вычислений, 149-187.

  42. 1) М.Р. Шура-Бура. Интерпретирующая система на ЭВМ.
    2) С.С. Камынин. Система стандартных подпрограмм для метода интерпретации.
    3) В.И. Собельман. Вспомогательные программы ИС-2.
    4) В.В. Мартынюк. Программа автоматического присвоения адресов.
    Всесоюзное совещание по вычислительной математике и вычислительной технике. Программа. Москва, 16-21 ноября 1959 г. Издательство Московского университета, 1959.
  43. М.Р. Шура-Бура. Система интерпретации ИС-2. В сб. "Библиотека стандартных программ". ЦБТИ, М,. 1961.
  44. В.В. Мартынюк. О методе символических адресов. Проблемы кибернетики. Выпуск 6. ГИФМЛ, М., 1961, 45-58.
  45. В.С. Королюк. Об одном способе программирования. Доклады АН УССР, №12 (1958) 1292-1295 (укр.).
  46. В.С. Королюк. О понятии адресного алгоритма. Проблемы кибернетики. Выпуск 4. ГИФМЛ, М., 1960, 95-110.
  47. Е.Л. Ющенко. Адресное программирование. ГИТЛ, Киев, 1963, 288 стр.
  48. R.A. Brooker. The Autocode Programs developed for the Manchester University Computers. Reprinted from the Computer Journal, 1958, 8 p.
  49. В.М. Глушков, Е.Л. Ющенко. Вычислительная машина "Киев". ГИТЛ, Киев, 1962, 183 стр.
    • 1) М.А. Яковлева. Крупноблочная система программирования.
    • 2) Л.Т. Петрова и И.А. Платунова. Реализация на машине вычислений в исходном классе списков.
    • 3) Т.Н. Первозванская. Проведение аналитических выкладок на ЭВМ при решении некоторых типов дифференциальных уравнений.
    • 4) К.В. Шахбазян. Исчисление программ функциональных операций.
    • 5) Т.Н. Смирнова. Полиномиальный прораб и проведение аналитических выкладок на ЭВМ.
    Труды Математического института им. В.А. Стеклова. XVI. Работы по автоматическому программированию, численным методам и функциональному анализу. Издательство АН СССР, М.,-Л., 1962, 4-112.
  50. А.П. Ершов. О программировании арифметических операторов. Доклады АН СССР, 118, №3 (1958), 427-430.
  51. Л.Н. Королев. Кодирование и свертывание кодов. Доклады АН СССР, 113, №4, 746-747.
  52. Л.Н. Королев. Методы выборки нужного слова из словаря. В сб. "Вычислительная техника". Издательство АН СССР, М., 1958, 116-118.
  53. Г.М. Адельсон-Вельский, Е.М. Ландис. Один алгоритм организации информации. Доклады АН СССР, 146, №2 (1962), 263-266.
  54. А.Л. Брудно. Грани и оценки для сокращения перебора вариантов. Проблемы кибернетики, выпуск 10, ГИФМЛ, М., 1963, 141-150.
  55. Ю.И. Янов. О логических схемах алгоритмов. Проблемы кибернетики. Выпуск 1, ГИФМЛ, М., 1958, 75-127.
  56. Р.И. Подловченко. Об основных понятиях программирования. Проблемы кибернетики. Выпуск 1, ГИФМЛ, М., 1958, 128-134. Выпуск 2, 1960, 123-138.
  57. Н.А. Криницкий. Равносильные преобразования логических схем. Автореферат диссертации. МГУ, М., 1959.
  58. Н.А. Криницкий, Г.А. Миронов, Г.Д. Фролов. Программирование. Наука. М., 1966.
  59. Л.А. Калужнин. Об алгоритмизации математических задач. Проблемы кибернетики. Выпуск 2, ГИФМЛ, М., 1959, 51-68.
  60. А.П. Ершов. Операторные алгоритмы. I. (Основные понятия). Проблемы кибернетики. Выпуск 3, ГИФМЛ, М., 1960, 5-48. Операторные алгоритмы. II. (Описание основных конструкций программирования). Проблемы кибернетики. Выпуск 8, ГИФМЛ, М., 1962, 211-233.
  61. Э.З. Любимский. Об автоматизации программирования и методе программирующих программ. Автореферат диссертации. МИАН СССР, М., 1958.
  62. И.Б. Задыхайло. Организация циклического процесса счета по параметрической записи специального вида. Журн. вычислительной математики и математ. физики. 3, №2 (1963), 337-357.
  63. В.Е. Котов, А.С. Нариньяни. Асинхронные вычислительные процессы над памятью. Кибернетика, №3 (1966), 64-71.
  64. E. Dijkstra. Guarded Commands, Nondeterminacy and Formal Derivation of Programs. Communications of the ACM, 18, N 8 (1975), 453-457.
  65. L.N. Korolev. Some methods of automatic coding for BESM and STRELA computers. Computer programming and artificial intelligence. Lectures given at the University of Michigan. Summer 1958. Edited by John W. Carr, III. College of Engineering. 489-510.
  66. A.P. Ershov. Works of the Computing Center of the Asci of the USSR in the field of automatic programming. Proceedings of the Symposium on The Mechanization of Thought Processes held at the NPL, Teddington, November 24-27, 1958.
  67. A.P. Ershov. Automatic Programming in the Soviet Union. Datamation, 5, N 4 (1959), 14-20.
  68. Report on the Algorithmic Language ALGOL. Edited by A.J. Perlis and K. Samelson Comm. of the ACM, 1, N 12 (1958).
  69. Автоматизация программирования. С. переводов под редакцией А.П. Ершова. ГИФМЛ, М., 1961, 368 стр.
    • ФОРТРАН
    • ЮНИКОД
    • СОАП 2
    • ИТ
    • ФОРТРАНЗИТ
    • АЛГОЛ
  70. А.М. Гильман. О некоторых приемах программирования в коде ЭВМ ГИФТИ. Проблемы кибернетики. Выпуск 3, ГИФМЛ, М., 1960, 139-148.
  71. Г.А. Михайлов, Б.Н. Шитиков, Н.А. Явлинский. Цифровая электронная счетная машина ЦЭМ-1. Проблемы кибернетики. Выпуск 1, ГИМЛ, М., 1958, 190-202.
  72. Н.А. Криницкий, Г.А. Миронов, Т.Д. Фролов. Программирование. Под ред. М.Р. Шура-Бура. ГИФМЛ, М., 1963, 383 стр.
  73. И.Г. Илзиня. Программирование для двухадресных цифровых вычислительных машин. Издательство АН Латв. ССР, Рига, 1962.
  74. М.Р. Шура-Бура. Программирование. Математика в СССР за 40 лет. Том 1, ГИФМЛ, М., 1959, 879-886.
  75. А.П. Ершов. Какой должна быть следующая программа? Всесоюзное совещание по вычислительной математике и вычислительной технике. (Программа). 16-21 ноября 1959 г. Издательство Московского университета, 1959. (опубликовано в [79]).
  76. А.П. Ершов. Основные принципы построения программирующей программы Института математики СО АН СССР. Сибирский математический журнал, 2, №6 (1961), 835-852.
  77. Сообщение об алгоритмическом языке АЛГОЛ. Под редакцией Перлиса А. Дж., Замельзона К. Перевод А.П. Ершова. Вычислительный центр АН СССР. М., 1959, 35 стр.
  78. J.W. Backus, F.L. Bauer, J. Green, C. Katz, J. Mc Carthy, P. Naur, A.J. Perlis, H. Rutishauser, K. Samelson, B. Vauquois, J.H. Wegstein, A. van Wijngaarden, M. Woodger. Report on the algorithmic language ALGOL 60. Edited by Peter Naur. ALGOL Bulletin Supplement no.2, 1 March, 1960. Regnecentralen, Valby, Denmark.
  79. Дж.В. Бэкус, Ф.Л. Бауэр, Дж. Грин, С. Кэтц, Дж. Маккарти, П. Наур, Э.Дж. Перлис, Х. Рутисхаузер, К. Замельзон, Б. Вокуа, Дж. Уэгстейн, А. Ван-Вейнгаарден, М. Вуджер. Сообщение об алгоритмическом языке АЛГОЛ 60. Под редакцией Петера Наура. Перевод Г.И. Кожухина под редакцией А.П. Ершова. Вычислительный центр АН СССР, М., 1960; Журн. вычислит. математики и математ. физики, 1, №2 (1961), 308-342.
  80. А.П. Ершов, Г.И. Кожухин, Ю.И. Волошин. Входной язык системы автоматического программирования (предварительное сообщение). Вычислительный центр АН СССР, М., 1961, 175 стр.
  81. Communications of the Association for Computing Machinery, 4, N 1, January 1961.
  82. М.Р. Шура-Бура, А.П. Ершов. Машинные языки и автоматическое программирование. Труды 4-го Всесоюзного математического съезда. Ленинград, 3-12 июля 1961. Том 1. Пленарные доклады. Изд. АН СССР, Ленинград, 1963, 243-250.
  83. В.Н. Попов, В.А. Степанов, А.Г. Стишева, Н.А. Травникова. Программирующая программа. Журн. вычислит. математики и математ. физики. 4, №1 (1964), 78-95.
  84. М.Р. Шура-Бура, Э.З. Любимский. Транслятор АЛГОЛ-60. Журн. вычислит. математики и математ. физики. 4, №1 (1964), 96-112.
  85. Г.И. Бабецкий, М.М. Бежанова, Ю.М. Волошин, А.П. Ершов, Б.А. Загацкий, Л.Л. Змиевская, Г.И. Кожухин, С.К. Кожухина Р.Д. Мишковия, Ю.И. Михалевич, И.В. Поттосин, Л.К. Трохан. Система автоматизации программирования АЛЬФА. Журн. вычислит. математики и математ. физики. 5, №2 (1965), 317-325.
  86. А.П. Ершов, Г.И. Кожухин, Ю.М. Волошин. Входной язык для систем автоматического программирования. Сибирское отделение АН СССР. Новосибирск, 1964.
  87. В.И. Собельман, М.Р. Шура-Бура. Реализация рекурсивных процедур в языке АЛГОЛ-60. Журн. вычислит. математики и математ. физики. 2, №2 (1962), 303-316.
  88. М.Р. Шура-Бура, В.В. Мартынюк. Об эффективной организации диамического использования памяти. Журн. вычислит. математики и математ. физики. 4, №5 (1962), 963-967.
  89. Г.И. Бабецкий и др. (см. [88]). АЛЬФА - система автоматизации программирования. Под редакцией А.П. Ершова. Наука, Сибирское отделение, Новосибирск, 1967, 308 стр.
  90. Описание языка АЛГАМС. Алгоритмы и алгоритмические языки. Выпуск 3. Вычислительный центр АН СССР, М., 1968, 3-56.
  91. С.П. Суржиков. Автоматизация пользования машиной среднего класса типа "М-20" (Автооператор). 1-я Всесоюзная конференция по программированию. Киев, октябрь 1968 г., Институт кибернетики АН УСССР, Киев, 1968.
  92. В.Л. Катков, В.П. Морозов, И.В. Поттосин, А.Ф. Рар, Л.Я. Семенова, А.Е. Хоперсков. ЭПСИЛОН - система автоматизации программирования задач символьной обработки. Наука, Новосибирск, 1972.
  93. В.Л. Катков, А.Ф. Рар. Программирование на языке ЭПСИЛОН. Наука, Новосибирск, 1972.
  94. С.С. Камынин, Э.З. Любимский. Алгоритмический машинно-ориентированный язык - АЛМО. Алгоритмы и алгоритмические языки. Выпуск 1. Вычислительный центр АН СССР, М., 1967, 5-58.
  95. А.П. Ершов. Программирование-68. (Вступительный доклад на 1-й Всесоюзной конференции по программированию. Киев, октябрь 1968 г.). Труды семинара "Автоматизация программирования". АН УССР, Киев, 3-26.
  96. А.И. Китов, Н.А. Криницкий, П.Н. Комолов. Элементы программирования. Издательство Артиллерийской инженерной академии им. Дзержинского, М., 1956.
  97. А.И. Китов, Н.А. Криницкий. Электронные цифровые машины и программирование. ГИФМЛ, М., 1959, 572 стр.
  98. Б.В. Гнеденко, В.С. Королюк, Е.Л. Ющенко. Элементы программирования. ГИФМЛ, М., 1961, 348 стр.
  99. Е.А. Жоголев, Н.П. Трифонов. Курс программирования. Наука, М., 1964, 388 стр.
  100. Справочник для поступающих в высшие учебные заведения в 1975 году. Высшая школа, М., 1975, 342 стр.
  101. И.С. Мухин, А.И. Срагович. Форма контуров равноустойчивых откосов. Инженерный сборник, №23 (1956), 121-131.
  102. Ю.И. Янов. О равносильности и преобразованиях схем программ. Автореферат диссертации. МИАН СССР, М., 1957.
  103. О.С. Кулагина. Некоторые теоретические вопросы машинного перевода. Автореферат диссертации. МИАН СССР, М., 1958.
  104. Л.Н. Королев. Некоторые вопросы теории машинного словаря. Автореферат диссертации. ИТМ и ВТ АН СССР, М., 1959.
  105. Семинары по кибернетике в Московском университете. Проблемы кибернетики, Выпуск 1, ГИФМЛ, М., 1958, стр. 263.
  106. С.С. Лавров. Об экономии памяти в замкнутых операторных схемах. Журн. вычислит. математики и математ. физики, 1, №4 (1961), 687-701.
  107. А.П. Ершов. Сведение задачи распределения памяти при составлении программ к задаче раскраски вершин графов. Доклады АН СССР, 142, №4 (1962), 785-787.
  108. ЦСУ СССР. СССР в цифрах в 1975 году. Статистика, М., 1976.

Препринт ВЦ СО АН СССР
№12, 1976 год

Р е з ю м е

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

Исследование подготовлено для трудов международной научной конференции по истории вычислительного дела, состоявшейся в Лос-Аламосе (США) с 10 по 15 июня 1976 года.

Введение


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

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

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

В-третьих, авторы сознательно ограничили себя первыми пятнадцатью годами развития программирования, обрывая повествование 1963-м годом, когда заработали первые трансляторы с Алгола 60. С одной стороны, программирование в СССР сформировало свой современный облик и приобрело необходимую полноту именно в последние 13 лет. С другой стороны, его развитие в эти последние годы было уже гораздо менее специфично и неотделимо от сложившейся к этому времени мировой научно-технической тенденции. В первые же пятнадцать лет, как увидит читатель, оно развивалось в значительной степени под воздействием собственных внутренних импульсов, ассимилируя интуицию и кругозор зрелых математиков, умноженные на энергию и энтузиазм молодого поколения первых новообразованных программистов.

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

В ходе изложения авторам придется ссылаться на собственные работы. В таких случаях всегда возникает психологическая проблема самоидентификации. Желая, с одной стороны, освободиться от элемента персонализации, связываемой с местоимениями "я" и "мы", а с другой - избежать снобистского упоминания о себе как о постороннем человеке, авторы будут ссылаться на самих себя с помощью идентификаторов АЕ и ШБ соответственно, скрываясь за общим именем "авторы", когда речь идет о данной работе.

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

Авторы будут благодарны каждому, кто пожелает обратить внимание на неточности или упущения, которые могут обнаружиться в этой работе.

1. Предыстория (1946-1949)


Вторая мировая война приостановила в СССР ряд научных исследований и проектов в области создания, как тогда говорили, математической техники. В то же время в СССР существовала непрерываемая традиция, идущая от П.Л. Чебышева, внимательного отношения и научного интереса к прикладной математике и методам вычислений. В годы становления советской науки она получила особое развитие в научной и общественной деятельности академика А.Н. Крылова. Потребности военного времени содействовали выполнению серии прикладных работ, требовавших разработки численных методов и способов автоматизации вычислений, прежде всего для управления стрельбой. Потребности радиолокации и радиосвязи создали предпосылки для освоения высокочастотной импульсной техники.

Это противоречивое положение было выразительно представлено в тематическом выпуске журнала "Успехи математических наук" (I, №5-6, 1946), начавшем регулярно публиковаться с первого послевоенного года [1]. Выпуск содержал две обзорных оригинальных статьи, подготовленных еще до войны, и две переводных, одна из которых (дифференциальный анализатор Буша) оказала заметное влияние на специалистов. Никакого намека ни на электронную вычислительную технику, ни на концепцию автоматических вычислительных машин с программным управлением этот выпуск даже и не содержал. В то же время вступительная статья Н.Е. Кобринского и Л.А. Люстерника начиналась замечательным предсказанием о роли вычислительной техники, которое даже в наше время могло бы в качестве постановки проблемы открывать любую вычислительную конференцию. Представляется необходимым воздать должное проницательности авторов статьи и привести выдержки из этой постановки проблемы ([1], 4-6).

"... Современная вычислительная практика весьма разнообразна, и соответственно этому весьма разнообразны и технические средства, в ней применяемые.

Прежде всего, укажем на "повседневную" вычислительную практику бухгалтерии, учета, статистики, рядового технического расчета. Математические задачи здесь большей частью несложны - в основном арифметические действия. Но количество людей, занятых их производством, огромно. : В настоящее время производство счетных приборов, обслуживающих эту массовую практику, является в ряде стран отраслью промышленности.

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

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

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

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

Появление этих технических средств ставит по-новому задачи вычислительной математики. Алгоритм решения задачи, ориентированный на те или иные технические средства, не всегда должен быть повторением алгоритма, принятого для ее решения ручным способом : Технические средства современной вычислительной математики позволяют "брать в лоб" такие задачи, которые ранее считались практически неразрешимыми и требовали обходных путей : Современная "машинная математика" превратилась в мощное орудие естественно-научных и технических дисциплин, увлекательную комплексную область, требующую совместной работы математиков, техников разных специальностей - механиков, электриков, оптиков и т.д. и физиков.

... Успехи "машинной математики" последнего времени связаны в значительной степени также с развитием автоматики. В современных больших математических машинах мы видим автоматическое управление сложным агрегатом, заставляющее отдельные его части выполнять в заданной последовательности заданные операции, сложные передачи показаний с одних частей машины на другие, регулирование синхронности происходящих процессов и т.д. Можно сказать, что "математическая техника" является экспериментальной базой для автоматики вообще. Тем самым ее достижения имеют большой общетехнический интерес."

Этот дальновидный взгляд на вычислительную технику сложился в стенах Математического института АН СССР (МИАН СССР). Институт в то время был не только средоточием первоклассных исследований в разделах теоретической математики, но и был весьма органически связан с широким кругом проблем прикладной математики, в частности, в связи с возложенными на Академию наук государственными заданиями по важным прикладным исследованиям и расчетам, связанным с созданием новой техники. Этой стороной деятельности МИАН руководил академик М.В. Келдыш, ставший к этому времени заместителем директора Института, академика И.М. Виноградова. Непосредственные вычислительные и машинные аспекты прикладной математики изучались в то время в отделе приближенных вычислений, который возглавлял член-корреспондент АН СССР Л.А. Люстерник.

Идея программно-управляемой автоматической цифровой вычислительной машины пришла в СССР из Соединенных Штатов в 1947 году. В этом году М.Л. Быховский, бывший в те годы чуть ли не монопольным переводчиком англоязычной литературы по вычислительной технике, опубликовал в УМН короткую информационную заметку [2], в которой на основе публикаций [3-5] известил о машинах МАРК I и ЭНИАК. Аналогичная более поздняя статья Хартри [6] и более подробное описание МАРКа I [7] появились в УМН в русском переводе в 1948 г., соответственно, в [8] и [9]. В заметке [2] не было каких бы то ни было оценочных комментариев к материалу, а ее название скорее подчеркивало преемственность в развитии счетно-аналитических машин, нежели выработку новой концепции автоматических вычислителей.

Материалы, которые принято считать основополагающими по логической структуре электронных вычислительных цифровых машин с хранимой программой [10-13], в то время (а в оригинальных изданиях и сейчас) были недоступны в СССР. (Правда, на трудную доступность этих исторических документов сетовали и авторы обзоров [16] и [20], бывшие в США.) Однако в течение 1947-1948 гг. в таких доступных журналах, как

  • Review of Scientific Instruments
  • Electronics
  • Proceedings of the IRE
  • Mathematical Tables and other Aids to Computation
  • Journal of Franklin Institute,

а также в ряде других появилось изрядное число публикаций "второго эшелона", содержащих достаточное количество научной информации. С некоторым запозданием в СССР также стали доступны труды известного симпозиума 1947 года в Гарвардском университете [14]. На основе этих материалов в майском - июньском выпуске УМН 1949 г. появилась обширная обзорная статья М.Л. Быховского под названием "Основы электронных математических машин дискретного счета" [15]. Статья, судя по всему, из-за большой спешки, а также в связи с ограничениями на объем не содержала ни списка источников, ни описания конкретных машин. Этот, очень деловой, обзор содержал, главным образом, описание инженерных принципов реализации отдельных узлов ЭВМ и был во многом аналогичен первому монографическому описанию ЭВМ "Быстродействующие вычислительные машины" под редакцией У. Стифлера, подготовленному в США в 1950 г. [16] и изданному в СССР в русском переводе в 1952 г. [17].

Указанная монография вместе с небольшим разделом (глава V) книги Ф. Муррея "Теория математических машин" [18], вышедшей в русском переводе в 1949 г. [19], и широко известной в Европе обзорной статьей Г. Рутисхаузера, А. Шпайзера и Э. Штифеля [20], также переведенной на русский язык и изданной в 1952 г. [21], по-видимому, замыкает ту совокупность исходного знания, которым были вооружены советские специалисты, начавшие в первую послевоенную пятилетку работу в области электронной вычислительной техники.

Возвращаясь к публикации Быховского [15], представляет, как нам кажется, интерес процитировать первое на русском языке изложение принципов программного управления ([15], стр. 110-111):

"... Решение на машине некоторой задачи требует разложения ее в детальную последовательность арифметических и логических действий, причем эта последовательность должна быть записана в виде длинного ряда "команд", которые тем или другим способом вводятся в машину. Каждая такая "команда" в общем случае должна содержать в себе следующие сведения: 1) откуда взять числа, над которыми следует произвести арифметическую операцию, 2) какую операцию следует произвести, 3) куда передать результат и 4) откуда взять следующую команду.

... Команды записываются в кодированном виде посредством обычных цифр (чисел), чаще всего по двоичной системе. Эти числа-команды вводятся в машину при помощи перфокарт (или магнитных лент), откуда они поступают в другие блоки памяти, в частности, в устройства электронной памяти, где с ними оперируют, как с обычными числами. Из электронной памяти данная команда поступает в блок центрального управления, где она дешифрируется в виде включения определенных устройств, выполняющих эту команду. Кроме того, данная команда указывает еще место, где находится следующая команда. В блоке центрального управления указанное обстоятельство дешифрируется в виде подключения к блоку управления в следующем цикле того элемента памяти, где эта следующая команда находится. Таким образом, машина автоматически выполняет любую заданную последовательность. Следует отметить, что данная последовательность команд, необходимая для решения определенной задачи, может быть значительно упрощена, если строить ее по принципу получения новых команд путем логических операций над старыми, а такие операции можно свести к арифметическим действиям над числами, представляющими команды. Вследствие этого в современных машинах числа-команды подаются из устройства памяти не только в блок центрального управления, но и в счетные цепи.

Упрощение и рациональное построение серии программных команд для решения тех или иных задач представляет собой актуальнейшую задачу современных универсальных машин дискретного счета :"

В 1948 году проблемы развития вычислительной техники в СССР стали общегосударственной задачей. Проектирование и производство вычислительных средств были идентифицированы как самостоятельное научно-техническое направление. В Академии наук был создан новый Институт точной механики и вычислительной техники (ИТМ и ВТ). Его возглавил известный специалист в области машин и механизмов академик Н.Г. Бруевич - ученый широкого кругозора, бывший в то время Академиком-секретарем Президиума Академии наук СССР. Этот институт был создан на основе уже существовавших в то время в разных организациях Академии наук научных групп и подразделений, имевших отношение к проблеме механизации вычислений и создания математических инструментов. В частности, из МИАН в ИТМ и ВТ был переведен отдел приближенных вычислений во главе с Л.А. Люстерником. В Министерстве приборостроения и средств автоматизации СССР было создано специальное конструкторское бюро для проектирования электронного вычислительного оборудования. Его возглавил М.А. Лесечко - инженер, хорошо зарекомендовавший себя в решении задач создания новой техники в годы войны и обладающий выдающимися организаторскими способностями.

Примерно в это же время в Киеве директор Института электротехники Академии наук Украины С.А. Лебедев начал инициативные исследования по созданию электронных вычислительных машин. Его начальные идеи лежали в русле, проложенном разработкой ЭНИАКа. С самого начала особенностью интересов С.А. Лебедева было создание быстродействующих цифровых элементов и счетных цепей. Большую поддержку инициативе С.А. Лебедева оказал академик М.А. Лаврентьев, тоже работавший в то время в Киеве. В полуразрушенном городе в то время было очень трудно с производственными площадями, и М.А. Лаврентьев, проводя исследования и эксперименты, направленные на создание теории кумулятивного взрыва, предоставил несколько комнат для сотрудников С.А. Лебедева в старом здании бывшего монастыря в Феофании, под Киевом. Именно там в 1951 году заработала "первая в СССР и континентальной Европе" [22] ЭВМ, получившая впоследствии название МЭСМ (Малая Электронная Счетная Машина) Академии наук УССР.

2. Формирование начального знания (1950-1953)


Организованная научная работа в области программирования в СССР началась в 1950 году. Её инициатором явился Л.А. Люстерник, организовавший в этом году в отделе приближенных вычислений ИТМ и ВТ специальный семинар по программированию. ШБ был одним из сотрудников отдела и участником семинара. Работа протекала параллельно с проектированием машины БЭСМ и завершилась написанием одной из первых в мире монографий, специально посвященной вопросам программирования [23]. Книга была частью отчетного описания машины БЭСМ, опубликованного в нескольких томах в 1952 году. Поскольку на этой книге выросло все первое поколение советских программистов, имеет смысл остановиться на ее содержании более подробно.

В качестве источников, имеющих наиболее прямое отношение к предмету исследования, книга ссылается на перевод книги Муррея [19], на монографию под редакцией Стиффлера [16] и на обзор Рутисхаузера, Шпайзера и Штифеля [20].

Книга Муррея была в основном посвящена старой технике, но в небольшой главе, посвященной ЭВМ, содержала со ссылкой на [13] выразительный пример программирования циклического процесса со счетом индекса для организации заданного числа повторений и с использованием текущей разности для организации итерационного цикла.

В книге Стиффлера довольно подробно рассматривались арифметические основы ЭВМ, давалось общее описание принципа программного управления и была приведена одноадресная система команд со ссылкой на [12].

Обзор [20] во многом повторял содержание [16], но содержал в дополнение к нему изложение некоторых глав еще одной основополагающей работы Голдстайна и фон Неймана [24] (понятие блок-схемы как средства для наглядного представления ветвей и циклов программы, понятие параметра цикла и зависимости адресов от параметра), рассматривал различные системы команд (от одно- до четырехадресных систем) и впервые упоминал об индекс-регистре (i-регистр в МАРКе III). Не менее важной, однако, была попытка авторов обзора систематизировать процесс программирования в целом и обратить внимание на использование самой ЭВМ для упрощения программирования. Они писали (4.1 [20]):

"Подготовка задач, подлежащих решению в вычислительной машине с программным управлением, состоит из следующих этапов:

а) Задача, предлагаемая вычислительному бюро, вообще говоря, в физико-технической интерпретации, должна быть сформулирована математически :

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

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

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

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

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

Из введения (1.3 - 1.4):

"Подготовку задачи частично можно производить при помощи отдельной вычислительной машины, расшифровывающей общий управляющий сигнал, задаваемый человеком, в целый ряд отдельных сигналов управления. Такой общий управляющий сигнал может, например, означать: "Следует вычислить неопределенный интеграл функции, находящейся в группе ячеек 1-100 накопителя". Первый шаг в этом направлении сделан в машине МАРК III, где запись программы на ленту осуществляется шифровальной машиной, в которую математик может задавать определенные вычислительные операции в их обычном математическом выражении. : Как видно из сказанного, не следует представлять себе дело так, что развитие вычислительных машин должно состоять (только) в увеличении их вычислительной скорости :

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

После анализа источников (к ним надо еще было бы добавить некоторые журнальные статьи, например, [25] в связи с использованием подпрограмм в машине ЭДСАК), вернемся к рассмотрению книги "Программирование для быстродействующих электронных счетных машин".

Глава I. Цифровые машины и автоматизация вычислений (21 стр.)

Определение цифровых машин, системы счисления, логическая структура алгоритмов (последовательные вычисления, циклы, разветвления), автоматические вычислительные машины, принцип программного управления, оперативная и внешняя памяти.

Глава II. Операции над числами в цифровых машинах (94 стр.)

Изображение чисел, фиксированная и плавающая запятая, операции над числами и двоичными кодами, особенности действий над конечно-разрядными числами, схемы умножения, деления и извлечения квадратного корня.

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

Глава III. Некоторые стандартные процессы при автоматических вычислениях (24 стр.)

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

Глава IV. Программирование решений математических задач (86 стр.)

Глава начинается с повторения принципа программного управления и свойств команд, адреса, кода операции, адресности. При сравнении одно- и трехадресных кодов как наиболее предпочтительных отмечается их принципиальная эквивалентность, большее удобство трехадресного кода и большая информационная экономичность одноадресного. Впервые формулируется известное прикидочное правило: число команд в одноадресной программе примерно вдвое больше того же числа в трехадресной. Затем дается пример простейшей программы (комплексного деления) в трехадресном и одноадресном (в символике ЭДСАКа) кодах. Подробно описываются команды условного и безусловного перехода в разных вариантах адресности команд.

На примере решения квадратных и кубических уравнений составляются программы, содержащие разветвления. Подробно описывается цифровое кодирование команд и связанные с ним способы преобразования как команды в целом, так и отдельных ее частей (в трехадресном коде). Выделяются случаи инициализации команды, аддитивного изменения адреса, формирования адреса, "реставрации" команды к начальному виду. Затем даются система команд абстрактной трехадресной машины, обозначения символического кодирования, дисциплина распределения памяти. Эти обозначения установили многолетнюю традицию стилистики написания машинных трехадресных программ и использования абстрактной машины для описания принципов программирования. На примерах демонстрируется управление циклом с помощью сравнения по переменной команде и по счетчику. Далее впервые формулируется общий принцип программирования цикла (с ненулевым числом повторений) ([23], стр. 189):

"... Если решение задачи состоит в периодическом повторении основной серии операций, то такую серию операций мы будем в дальнейшем называть циклом, а процессы, состоящие в повторении цикла, - циклическими. ... Пусть последовательность операций (или совокупности операций) есть A1, A2, ..., An и при некотором расположении исходных данных в запоминающем устройстве Ai+1 может быть единообразным способом получено из Ai. Тогда целесообразно составить программу по такому плану:

  • I A1
  • II Изменение Ai в Ai+1 (Ai -> Ai+1)
  • III Контрольное сравнение

Или

  • I (Ai -> Ai+1)
  • II A0
  • III Контрольное сравнение"

Специальный параграф обсуждает способы составления сложных программ из более простых. Способы вызова подпрограмм обсуждаются неподробно и содержат только два приема: формирование возврата на главную программу перед переходом к подпрограмме, находящейся на известном фиксированном месте, и использование двух (центрального и местного) управлений. Для больших задач рекомендуется разбиение задачи на содержательные подзадачи, а потом составление блок-схемы, состоящей из подзадач. Выделяется систематическая (но не автоматизированная) процедура настройки куска программы по месту. Затем описывается прием использования разными ветвями вычислений общих кусков, который сейчас можно было бы назвать запроцедуриванием. Глава завершается примером программы численного решения уравнений баллистики, а также 16-ю программами решения стандартных алгоритмов из предыдущей главы.

Глава V. Программы для решения некоторых математических задач (85 стр.)

Содержит 17 содержательных программ решения следующих задач: , преобразования алгебраических многочленов, решение системы линейных уравнений, интегрирования обыкновенных дифференциальных уравнений методом Рунге-Кутта, интегрирование уравнений внешней баллистики методом Адамса, вычисление таблицы бесселевых функций. Полезным свойством книги оказались весьма подробные пояснения к программам, описывающие большое количество технических программистских приемов (представление перестановок, взаимодействие команд управления во вложенных циклах, разные способы контроля числа повторений, униформизация вычислений для увеличения степени цикличности, повышение скорости за счет расхода памяти и наоборот и т.п.).

В этом же 1952 г., в СССР появилась известная книга М. Уилкса, Д. Уилера и С. Гилла [26], которая была переиздана в 1953 г. в русском переводе [27]. Она существенно дополнила опыт программирования, отраженный в [23]. Эта книга настолько хорошо известна, что не имеет смысла напоминать ее содержание. Осмысливая ее с сегодняшней позиции, можно оценить эту книгу не только как средоточие реального опыта, столь драгоценного в то время, и не только как глубокий вклад в технологию программирования, имея в виду использование библиотеки подпрограмм и программных средств отладки. Книга убедительно показала, насколько более эффективным становится использование о д е т о й машины, и была по существу первым описанием интегрированной системы программного обеспечения, являющейся одновременно и замкнутой в смысле полноты (тексты оборудования, как сейчас говорят, экстракоды 1-го уровня, математическая библиотека, служебные программы ввода-вывода, средства отладки, средства загрузки и ассемблирования, небольшие пакеты прикладных программ) и открытой в смысле способности к росту - все это, пронизанное единым стилем работы на машине, находящемся в гармоническом соответствии со скромными возможностями оборудования.

Заключая можно констатировать, что к началу интенсивного использования первых советских ЭВМ программисты были подготовлены сравнительно неплохо.

Следует отметить, что хотя важность развития вычислительной техники признавалась бесспорной, решительный поворот в сторону универсальных цифровых электронных машин было осуществить не так просто. Дело было не только в недостатке технической базы и других трудностях послевоенного периода. Имела место довольно серьезная дискуссия об установке на универсальные или специализированные средства. За представителями второго направления стояла не только инерция старой школы, но и методологический принцип "данную конкретную задачу часто можно эффективнее решить специальными средствами". Представители первого направления встречали дополнительное сопротивление некоторых философов-догматов, с опаской воспринимающих "кибернетические спекуляции по поводу электронного мозга". Нужны были авторитет и воля, чтобы утвердить это новое направление вычислительной техники и связанную с ним методологию.

В решение этой проблемы очень важный вклад внесли академики М.В. Келдыш, А.А. Дородницын, С.Л. Соболев и М.А. Лаврентьев. М.В. Келдыш, как авторы уже отмечали, возглавлял работу в области прикладной математики в МИАН, А.А. Дородницын возглавлял математический отдел в ЦАГИ, а С.Л. Соболев - математический отдел в Институте атомной энергии АН СССР. Каждый из них не только должным образом направил возглавляемые им коллективы, но и смог убедить заинтересованные ведомства в правильности ориентации на универсальные электронные вычислительные машины как главное звено в развитии вычислительной техники.

В начальный период своего существования ИТМ и ВТ представлял собой конгломерат разных научно-технических направлений, среди которых направление ЭВМ было в то время далеко не самым ведущим и, что самое главное, не имевшим своего носителя. Решающая роль в придании Институту более целеустремленного и современного направления работ принадлежит академику М.А. Лаврентьеву, который в 1950 году, приехав в Москву, стал директором Института. Он начал с того, что организовал в Институте отдел цифровых ЭВМ и пригласил С.А. Лебедева возглавить этот отдел с тем, чтобы, не дожидаясь завершения работ по МЭСМ, начать энергичную деятельность по конструированию большой ЭВМ. Проектная группа состояла, главным образом, из студентов - выпускников Московского энергетического института. Среди этих студентов были, в частности, В.С. Бурцев - нынешний директор ИТМ и ВТ, В.А. Мельников - ведущий конструктор знаменитой БЭСМ-6.

В 1951 году машина была спроектирована, а в 1952 году началась ее опытная эксплуатация. Машина была спроектирована в расчете на оперативную память на трубках Вильямса, но поскольку они были сначала недоступны, в качестве первого варианта памяти использовались ртутные линии задержки (до 1955 г.). Часть быстрой памяти была сделана только читающей и сконструирована в виде серии гнезд с пружинными контактами и прижимными крышками, сильно напоминающими вафельницы. "Вафельница" содержала одну 45-колонную перфокарту, в каждой строке которой содержалось по одной команде. Все оборудование, кроме трубок Вильямса и электроники, было "самодельное", включая ввод с перфоленты, двухдорожечный магнитофон, барабан и ртутную память. Машина по тем временам была весьма быстродействующей (см. таблицу в разделе 3), но трудности в ее реализации носили иногда самый неожиданный характер. В.С. Бурцев рассказывает, что когда наступило время сборки машины, потребовалось, естественно, несколько тысяч радиоламп новой конструкции. В то время это было непомерное количество: квоты распределения этого изделия между институтами исчислялись десятками, в лучшем случае сотнями. В поисках выхода из положения инженеры увидели, что на заводе радиоламп есть испытательный стенд, где тысячи ламп находятся под напряжением в течение сравнительно длительного времени. Была достигнута временная договоренность о том, чтобы использовать стойки БЭСМ в качестве испытательного стенда для продукции завода. Машина успешно выполняла эти двойные функции, пока не был накоплен необходимый запас.

БЭСМ имела трехадресную систему команд, обладавшую одним любопытным атавизмом, восходящим, по-видимому, к МАРК I и II: у нее было два счетчика команд: центральный и местный. Возвратная передача управления и возврат осуществлялись безусловным переходом с переключением на местное управление и обратным переключением на центральное управление. Местное управление использовалось также для выполнения операций обмена.

В этот же период в конструкторском бюро, руководимом М.А. Лесечко, началось проектирование другой ЭВМ, получившей название "Стрела" и предназначенной для серийного изготовления на Московском заводе счетно-аналитических машин. Главным конструктором машины стал Ю.Я. Базилевский, а одним из его ближайших сотрудников - Б.И. Рамеев, в дальнейшем создатель серии машин "Урал". Необходимость заранее предусмотреть проблемы заводского изготовления предопределила некоторые свойства проекта: меньше скорость, использование потенциальных электронных схем, просторный монтаж и т.п. Машина не имела магнитного барабана, но для нее были специально спроектированы 45-дорожечные магнитные ленты. Машина имела весьма удобную систему команд. В частности, каждая счетная команда вырабатывала логическое значение (признак ), по которому можно было устраивать условный переход. Другой особенностью было наличие "групповых операций", выполняющих покомпонентные действия с векторными массивами. Половина быстрой памяти была также односторонней, имела свое управление и использовалась для небольшой встроенной библиотеки подпрограмм.

Первая машина "Стрела" была установлена в отделении прикладной математики МИАН, где в конце 1953 года началась ее опытная, а вскоре и производственная эксплуатация.

Из пионеров советской вычислительной техники необходимо отметить также заведующего лабораторией электросистем Энергетического института АН СССР члена-корреспондента Академии наук И.С. Брука. Он приступил к работе над ЭВМ в 1951 году и построил небольшой макет, известный под названием М-1. После накопления первого опыта и формирования начального коллектива под его руководством в течение 1952 года была спроектирована машина М-2. Одним из ведущих разработчиков был М.И. Карцев, внесший впоследствии большой вклад в теорию и практику конструирования арифметических устройств. Эта машина положила начало серии машин среднего класса, причем экономичность была одним из основных принципов конструирования. В этом отношении конструкция машины М-2 была весьма удачной и создавшей долголетнюю традицию проектирования учениками И.С. Брука не одной серии недорогих и массовых ЭВМ. Среди них следует, в первую очередь, назвать Г.П. Лопатко - впоследствии главного конструктора серии машин "Минск".

3. Первый опыт и первые научные результаты на первой конференции (1954-1956)


Создание первых ЭВМ в СССР было расценено как весьма важное научно-техническое событие. С.А. Лебедев был выбран в 1953 году в действительные члены Академии наук по специальности "вычислительная техника", а Ю.Я. Базилевский был удостоен высшей в СССР правительственной награды - звания "Герой социалистического труда" с вручением Золотой звезды и ордена Ленина. В Академии наук и в Министерстве высшего образования был также осуществлен ряд организационных мер, направленных на формирование и укрепление коллективов, связанных с производством и использованием новой вычислительной техники.

Работы по прикладной математике в МИАН были сконцентрированы под руководством М.В. Келдыша в Отделении прикладной математики (ОПМ), ставшим впоследствии отдельным Институтом прикладной математики. В составе Отделения в 1953 г. был организован первый в СССР отдел программирования, который в течение первого года возглавлял А.А. Ляпунов, а с 1954 г. и по настоящее время - ШБ.

Годом раньше в Московском государственном университете была реорганизована кафедра вычислительной математики, предназначенная для обучения прикладных математиков, подготовленных для работы с ЭВМ. Заведующим кафедрой стал академик С.Л. Соболев.

Выпуски этой кафедры в 1953 и 1954 годах создали первое поколение специалистов, сознававших себя профессиональными программистами с самого начала своей карьеры.

В 1955 году был создан Вычислительный центр Академии наук СССР, предназначенный для ведения научной работы в области машинной математики и для предоставления открытого вычислительного обслуживания другим организациям Академии наук. Его директором стал А.А. Дородницын, также избранный в 1953 году в действительные члены АН СССР.

В 1952 году началась работа в области программирования в отделе приближенных вычислений Ленинградского отделения МИАН (ЛОМИ), который возглавлял Л.В. Канторович, до этого известный своими работами по функциональному анализу и пионерскими исследованиями в области линейного программирования.

После переезда С.А. Лебедева в Москву директор Института математики АН УССР профессор Б.В. Гнеденко привлек к себе в институт коллектив разработчиков МЭСМ, образовавший вычислительную лабораторию. Через несколько лет эту лабораторию возглавил В.М. Глушков, незадолго до этого защитивший докторскую диссертацию по теоретической алгебре. Кроме математического, он имел также инженерное электротехническое образование. В его проницательном представлении область вычислительной техники давала благоприятную возможность для реализации каждого из этих знаний. На базе вычислительной лаборатории в конце 50-х годов был создан Вычислительный центр Академии наук Украины, ставший впоследствии известным Институтом кибернетики АН УССР.

В 1954 году М.А. Лаврентьев передал пост директора ИТМ и ВТ С.А. Лебедеву. При образовании Вычислительного центра значительная часть сотрудников-математиков (включая АЕ, который начал свою работу в ИТМ и ВТ в 1953 г., еще будучи студентом МГУ) была переведена из института в ВЦ.

В 1955 году в МГУ был организован Вычислительный центр, развернувший научную и учебную работу на ЭВМ М-2.

Коллектив И.С. Брука в 1956 г. выделился из состава Энергетического института АН СССР и образовал Лабораторию управляющих машин и систем АН СССР, ставшую впоследствии Институтом электронных управляющих машин (ИНЭУМ).

Именно в этих коллективах были выполнены первые эксперименты и научные исследования, заложившие основы развития и применения 1-го поколения ЭВМ и нашедшие свое полное выражение в первом общесоюзном научном собрании, посвященном вычислительной технике. Это была конференция под названием "Пути развития советского математического машиностроения и приборостроения", которая состоялась в Москве с 12 по 17 марта 1956 г. в стенах Московского университета.

По тем масштабам это была в высшей степени представительная и обширная конференция. На ней присутствовало свыше тысячи участников, и было сделано 75 докладов [29].

Она происходила в обстановке большого политического и нравственного подъема, вызванного историческим 20-м съездом КПСС. На этом съезде, в частности, при определении программы развития народного хозяйства в 6-й пятилетке 1956-1959 годов было сказано ([30], стр. 447-448):

"Всемерно развивать радиотехническую и приборостроительную промышленность. : Увеличить за пятилетие изготовление : счетных и счетно-аналитических машин - в 4.5 раза. : Усилить работы по конструированию и производству автоматических быстродействующих машин для решения сложных математических задач и счетно-математических машин для автоматизации управления производственными процессами. : Широко развернуть научно-исследовательские работы по полупроводниковым приборами, расширить их практическое применение."

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

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

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

Интересно отметить, что конференция открылась докладом профессора Д.Ю. Панова "История и развитие электронных вычислительных машин". Этот доклад, естественно, подчеркивал первые успехи советского электронного вычислительного машиностроения и характеризовал (уже упоминавшуюся в I-м разделе) серьезную историческую традицию, существовавшую в России и СССР. В то же время в нем был объективно показан решающий вклад американских и английских ученых в становление и развитие идеи автоматической вычислительной машины с программным управлением, начиная с работ Бэббеджа. Докладчик особенно обращал внимание на размах и всесторонний характер промышленного проектирования и производства ЭВМ в США ([28], Пленарные заседания, 5-30).

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

  • С.А. Лебедев - "Быстродействующие универсальные вычислительные машины (общая сводка первых советских ЭВМ дана в Таблице I),
  • Ю.Я. Базилевский - "Специализированные машины и пути их развития",
  • В.Б. Ушаков - "Моделизирующие установки и тенденции их развития" ([28], Пленарные заседания, 31-43, 61-132).

С.А. Лебедев следующим образом идентифицировал основные направления развития универсальных математических машин:

  1. повышение быстродействия
  2. увеличение емкости памяти
  3. повышение надежности
  4. упрощение математической и технической эксплуатации.

Под упрощением математической эксплуатации С.А. Лебедев понимал "упрощение логики машин, разработку более совершенных типов машин в отношении логики программирования и решения математических задач". В качестве примера развития конструкции ЭВМ в этом направлении он привел автоматическую модификацию адреса команды и контроль за числом повторений цикла.

Пленарный доклад А.А. Дородницына "Решение математических и логических задач на быстродействующих электронных счетных машинах" ([28], Пленарные заседания, 44-52), посвященный, главным образом, решению уравнений с частными производными, содержал ряд постановок и прогнозов, связанных с разработкой и использованием ЭВМ. Он сказал:

"Анализ задач, которые выдвигаются сейчас в различных областях техники, показывает, что требование увеличения быстродействия до величины порядка миллиона операций в секунду и увеличения объема оперативной памяти до десятка и даже нескольких десятков тысяч чисел является вполне актуальным и, может быть, даже скромным требованием".

Это была первая постановка проблемы, приведшая через 8 лет к появлению БЭСМ-6.

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

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

Операторный метод А.А. Ляпунова. А.А. Ляпунов начал работу в отделе программирования ОПМ МИАН, имея за плечами военные годы офицера-артиллериста, докторскую диссертацию по дескриптивной теории множеств и опыт преподавания математики в военной академии. Особенностью его научного стиля была широкая естественнонаучная культура, интерес к выявлению общих закономерностей и широких аналогий и редкий дар проповедничества. Ему принадлежит заслуга формирования в СССР взгляда на программирование как на научную дисциплину.

А.А. Ляпунов проанализировал программирование в целом и выделил ряд его фундаментальных концепций. Процесс выполнения программы он рассмотрел как дискретную последовательность единиц действия - операторов, извлекаемых на основе правил управления из текста программы. Важной компонентой теории стала классификация операторов, введенная А.А. Ляпуновым. Он рассмотрел арифметические операторы (операторы присваивания), действующие на данные; логические операторы (включая как вычисление логических отношений, так и передачи управления); а также операторы модификации, действующие на другие операторы. Операторы модификации основывались на идее зависимости операторов от некоторого параметра (обычно, целочисленная переменная) и содержали в себе операторы формирования (инициализации), переадресации (модификация в соответствии с приращением параметра) и восстановления начального вида оператора. Текст программы представлялся состоящим из двух частей: схемы программы - символьного представления операторов, указывающего передачи управления и классификацию операторов, и спецификации операторов, указывающей их конкретное содержание. Это расчленение текста программы отражало также два этапа программирования: общее планирование алгоритма, находившее свое отражение в построении схемы программы и содержательной спецификации операторов (творческая часть), и затем систематическая реализация отдельных операторов средствами машинного языка (рутинная, формализуемая часть). Подчеркивалась также возможность систематических преобразований схемы программы, направленных на ее улучшение. Эта методология, которой А.И. Китов дал название "операторного метода" программирования [33], была описана А.А. Ляпуновым в первом в СССР учебном курсе программирования, прочитанным им в 1952/53 году в МГУ под названием "Принципы программирования", и в конспектной форме представлена докладом на конференции ([28], Часть III, 5-8), сделанным совместно с Ю.И. Яновым.

Этот метод привел к созданию теории схем программ и к первым в СССР трансляторам, а также создал многолетний стиль публикационной спецификации алгоритмов, дающий себя знать даже в наше время [34].

Первые трансляторы. Задача автоматизации программирования была в СССР впервые поставлена А.А. Ляпуновым в 1953 году в рамках его операторного метода как поиск систематических процедур, реализующих операторы схемы программы в терминах машинных команд, отправляясь от некоторой формализованной записи о функционировании этих операторов.

Идея создания интегрированной программной системы, производящей полную реализацию всех операторов, образующих схему программы, была высказана С.С. Камыниным и Э.З. Любимским летом 1954 года, когда они только-только начали свою работу в отделе программирования ОПМ МИАН.

В течение нескольких месяцев они опробовали на машине "Стрела" алгоритмы трансляции простых программ, содержащих арифметические, логические и переадресующие операторы. Эта экспериментальная программа была названа "Программирующей программой" (сокращенно ПП-1). Ее успешная работа побудила ШБ собрать широкую команду молодых программистов с тем, чтобы на этих идеях создать систему не только для отработки методов трансляции, но и для организации производственной работы. Транслятор, законченный в 1955 году, получил название ПП-2. Входной язык ПП-2 сохранял введенное Ляпуновым разбиение текста программы на схему и спецификацию операторов. К перечню операторов были добавлены засылки, позволяющие сократить число вхождений индексированных величин в программу, и операторы восстановления операторов программы к начальному виду. Программирование выражений не учитывало приоритета двуместных операций и выполнялось методом редукции, т.е. замены во входной строке запрограммированного терма на символ рабочей ячейки (при этом выяснялось, не входит ли этот терм в выражение несколько раз).

Параллельный проект транслятора для машины БЭСМ (ПП БЭСМ) был реализован АЕ с группой сотрудников ИТМ и ВТ. Толчком к этому проекту были доклад Э.З. Любимского о ПП-1, сделанный на семинаре в МГУ осенью 1954 г., эксперимент Л.Н. Королева по программированию арифметических выражений с учетом приоритета операций и собственные размышления АЕ о природе циклических процессов в программах. Входной язык ПП БЭСМ содержал арифметические операторы и логические операторы, несколько напоминающие современные операторы выбора. Наиболее важным новшеством в ПП БЭСМ были операторы цикла и индексные переменные (индексами могли быть параметры циклов). Наконец, текст программы не делился на схему и спецификацию операторов, а представлял собой бесформатный линейный текст, в котором операторы разделялись точкой с запятой.

Эти трансляторы были представлены на конференции в докладах С.С. Камынина и Э.З. Любимского и АЕ ([28], Часть III, 9-29).

На Таблице 2 приведены примеры текстов программы, выраженных в символике операторного метода А.А. Ляпунова и указанных трансляторов (туда также включены тексты двух более поздних трансляторов, которые будут обсуждаться в следующем разделе). В качестве примера взят алгоритм решения системы линейных уравнений n-го порядка итерационным методом Зейделя. Расчетная схема (I) этого алгоритма, приведенная Ф. Мурреем в его книге [19], является первой публикацией на русском языке алгоритма, предназначенного для решения на автоматической вычислительной машине с программным управлением, и взята, по-видимому, из ранних работ Х. Голдстайна и Дж. Неймана.

Очень интересным в сопоставлении с символикой А.А. Ляпунова является использованное мимоходом Ф. Мурреем символическое изображение (II) схемы вычислений. Оно является хорошим примером научного пророчества в период программистского Ветхого Завета.

Крупноблочное программирование. Л.В. Канторович, обсуждая проблемы программирования с группой выпускников Ленинградского университета 1953 и 1954 годов, образовавших программистское ядро ЛОМИ, высказал ряд глубоких идей. Он обратил внимание на роль информационных связей в представлении программы, в частности, изображая выражения как деревья. Он же ввел в рассмотрение составные данные как объект программы и определил понятие дескриптора. Соответствующие правила композиции составных объектов из простых получили название "геометрических операций". Процесс выполнения программного комплекса, представляющего собой информационную сеть (схему) отдельных модулей, Л.В. Канторович рассматривал как функционирование некоторой сверх-программы, которая определяет выполнение модулей на основе анализа информационных и управляющих связей схемы. Многие положения крупноблочного программирования были позднее переоткрыты или заново осмыслены на более высоком уровне при разработке систем работы со структурными файлами и в том, что сейчас называют модульным программированием.

Представляет интерес привести ряд выдержек из доклада Л.В. Канторовича, Л.Т. Петровой и М.А. Яковлевой на конференции ([28], Часть III, 30-36):

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

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

"... Представляется удобным также при схемной записи оперировать не с отдельными числами, а с более крупными объектами - величинами. В качестве таких числовых величин могут быть взяты вектор, матрица, трехмерная матрица, поле и т.д. Для величины наряду с ее числовым содержанием вводится справка, представляющая собой описание числового материала и его расположения. ... Так справка о величине K(матрица порядка n x k - Авт.) имеет вид

Матрица

где P - номер ячейки, в котором размещается первый элемент величины; n - число столбцов; k - число строк; h1 - расстояние между соседними элементами любой строчки; h2 - расстояние между первыми (и вообще - i-ми) элементами двух соседних строк. Отметим, что справка о транспонированной матрице K* имеет вид

Матрица

Отделение справки от числового материала тем более оправдано, что несколько величин может опираться на один и тот же числовой материал."

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

Технология программирования и решения задач на ЭВМ.

На конференции эти вопросы обсуждались, главным образом, в докладе ШБ ([28]. Пленарные заседания, 53-60). Уже первые годы работы на ЭВМ показали, что "истинная производительность машины должна определяться числом фактически решенных на машине задач, временем, необходимым для реализации решения каждой задачи, и количеством людей, занятых на подготовке и проведении задач и технической эксплуатации машины".

В докладе был поднят вопрос о взаимодействии "математика" и "программиста" при решении задачи на машине. Была выдвинута формула равноправного сотрудничества при определенном разделении специализаций.

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

К 1956 году в ОПМ МИАН постепенно сложились технологические принципы организации счета задач. Главной фигурой у машины стал оператор, формирующий и пропускающий пакет задач в отсутствие авторов задач на основе формализованных инструкций. Проблема "изгнания" программистов из машинного зала оказалась очень не простой. Появилось различие счетных и отладочных запусков, срочных и дежурных задач. В 1955 году появились первые программы контроля программ: интерпретирующая прокрутка с выдачей отладочной информации, "посмертные" выдачи, программы печати границ "линейных участков" программы и т.п.

В то же время в программировании сложилась, по нынешним понятиям, парадоксальная ситуация, когда автоматизация программирования с помощью трансляторов опередила в своем развитии другие методы, в частности, методы символического кодирования и использования библиотек программ. В докладе ШБ была поставлена задача более гармоничного объединения методов и расширения понятия "автоматизация программирования".

Обзор конференции 1956 года целесообразно заключить сводкой докладов о применении ЭВМ. Список докладов, как по представленным, так и по отсутствующим темам, авторам кажется весьма показательным ([28], Часть III, 62-180).

Три доклада были посвящены машинному переводу (с французского на русский и два проекта с английского на русский), остальные доклады - по одному на темы: вычисление элементарных функций, вычисление математических таблиц, решение задач газовой динамики, прогноз погоды, общее применение ЭВМ М-2 в учебном вычислительном центре МГУ, автоматический учет масштабов при вычислении с фиксированной запятой, расчеты методом Монте Карло, расчет линий уровня функций двух переменных, расчет устойчивости электрических систем.

Следует отметить, что в целом 1956 год был годом большого паблисити для вычислительного дела. В июне вышла первая в СССР книга учебного характера по ЭВМ: А.И. Китов "Электронные цифровые машины" [33]. В июне-июле 1956 г. на 3-м всесоюзном математическом съезде программисты впервые выступили перед математической аудиторией с докладами о своих работах [35]. Это были в основном повторения докладов мартовской конференции. Кульминацией выхода вычислительной науки и практики на общественную арену была специальная сессия Академии наук СССР, состоявшаяся в октябре 1956 года [36]. На ней выступили все ведущие ученые, причастные к рождению и первым годам развития ЭВМ в СССР. Это было собрание, единственное в своем роде, когда к строгому стилю академических собраний присоединялись элементы зрелища: доклад о машине БЭСМ сопровождался демонстрацией огромной электрифицированной динамической схемы, поясняющей принцип программного управления, а в момент доклада по машинному переводу была установлена прямая телетайпная связь с машиной для непосредственной демонстрации выдачи перевода заданного в этот же момент текста.

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

4. Накопление опыта и развитие знаний (1956-1959)


Итак, практикующие программисты и студенты имели в 1956 г. в своем распоряжении 5 методов программирования конкретных задач:
  1. Операторный метод с использованием программирующих программ [28];
  2. Метод библиотечных программ [27];
  3. Символическое кодирование (изложенное впервые А.И. Китовым [33] со ссылкой на работы, выполненные для ИБМ 701 [37]);
  4. Крупноблочное программирование по Л.В. Канторовичу [28];
  5. "Ручное" программирование с 8-ричным или 16-ричным кодированием машинных программ и с использованием блок-схем или операторных логических схем в качестве неформального подспорья.

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

С этой точки зрения было важно расширить фронт работ и, в частности, пережить опыт разработки и использования библиотеки стандартных подпрограмм. Это последнее направление получило особое развитие в Вычислительном центре МГУ, где в итоге интенсивной двухлетней работы была создана развитая библиотека подпрограмм, основная часть которой была опубликована в 1958 г. в монографии [38]. Вот как авторы объяснили свои цели:

"... Одним из путей автоматизации программирования является путь использования библиотеки стандартных подпрограмм. Сущность этого метода заключается в том, что для наиболее часто встречающихся алгоритмов раз и навсегда тщательно составляются подпрограммы, которые затем могут быть использованы в качестве готовых частей программы при решении любой конкретной задачи, где требуется реализация соответствующих алгоритмов. Это дает существенную экономию труда программиста.

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

Естественно, что структура изложения во многом напоминала книгу М. Уилкса, Д. Уилера и С. Гилла [27], преследуя в целом общие цели. Полезным качеством книги было включение в текст очерка об основных понятиях и приемах программирования, собравшего воедино и объяснившего значительную часть накопившейся к тому времени программистской терминологии. Это была также первая книга, в которой повсеместно использовались ляпуновские схемы программ для описания логической структуры подпрограмм.

1958 г. был, вообще, урожайным годом на публикации по программированию. В издательстве АН СССР вышло описание транслятора ПП БЭСМ [39]. Оно содержало изложение операторного метода, описание входного языка и основных алгоритмов трансляции и подробные блок-схемы транслятора.

В этом же году вышел первый выпуск известной "красной серии", основанной А.А. Ляпуновым под названием "Проблемы кибернетики". В нем, в частности, были опубликованы статьи, содержащие полное описание транслятора ПП-2 [42.2 - 6], а также изложение работы А.А. Ляпунова, приведшей к операторному методу, выполненной им в 1952-1953 годах [42.1].

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

Группа сотрудников Вычислительного центра разработала транслятор ППС для ЭВМ "Стрела-3" [40, 41]. Он был непосредсвенным развитием транслятора ПП БЭСМ (см. Таблицу 2, УШ). В нем, в частности, были введены более естественные обозначения для операторов циклов и для условий в логических операторах. В весьма суженных пределах имелась возможность задавать описания унарных процедур-функций, при условии, что телом процедуры являлось выражение или машинная подпрограмма.

Когда ЭВМ "Стрела" появилась в Вычислительном центре МГУ в 1956 г., там уже сложилась методика программирования на М-2 (обсуждавшаяся авторами в начале этого раздела). Ее естественным развитием стала концепция интегрированной системы автоматизации программирования, в которой транслятор был бы одной из компонент. Таким образом, кроме транслятора, разработанного под руководством Н.П. Трифонова, система содержала библиотеку стандартных подпрограмм, разработанную Е.А. Жоголевым "составляющую программу" (представляющую собой комбинацию простого ассемблера с загрузчиком) и серию отладочных программ. Система автоматизации программирования была подробно описана в сборнике работ, вышедшем в 1961 году [43].

Составляющая программа по тем временам обладала большой общностью. Она могла осуществлять настройку модуля загрузчика по месту, имела редактор внешних связей, возможность совмещения модулей в памяти, возможность как заданного, так и автоматического распределения памяти.

Выходом транслятора был стандартный модуль загрузки. Входной язык транслятора во многом следовал стилю ПП-2, хотя уже и не требовал строгого разделения на схему программы и на спецификацию операторов. В трансляторе был реализован в некотором объеме аппарат макроопределений, в котором тело макроса обозначало некоторую "подсхему" задачи, подставляемую предпроцессором на место сокращенного обозначения подсхемы. Таким аппаратом в трансляторе реализовались операторы цикла, которые во входном языке трактовались как "обобщенные операторы", т.е. сводимые к базисным.

В это время ШБ заинтересовал другой способ использования стандартных подпрограмм, который не требовал бы от программиста статического ассемблирования, так что подпрограмма вызывалась бы из библиотеки и настраивалась бы по месту при первом обращении к ней при выполнении программы. Это требовало создания административной системы, находящейся в памяти ЭВМ в процессе решения задачи. Сравнительно малые объемы памяти ЭВМ требовали весьма экономного проектирования, а также решения определенных проблем резидентации библиотеки и создания некоторой тактики выбрасывания подпрограмм при переполнении рабочего поля. Такие экономичные решения удалось найти, и второй вариант интерпретирующей системы (ИС-2) стал основным способом использования подпрограмм в новой ЭВМ М-20, созданной в 1958 году (см. ниже) [44, 45].

Элементы символического кодирования можно усмотреть уже в первых трансляторах ПП-2 и ПП БЭСМ. Текст программы на входном языке мог содержать так называемые "нестандартные операторы", представляющие собой фрагменты машинных программ, где в адресных частях могли находиться имена величин. Однако система символического кодирования, так сказать в чистом виде, появилась поздно - лишь в 1957 году для ЭВМ "Стрела" и в 1959 году для М-20 [44. 4], [46].

Принципы символического кодирования получили своеобразное развитие в Вычислительном центре АН Украинской ССР, созданном в конце 1958 года на базе отделов Института математики АН УССР, включавших, в том числе, и коллектив разработчиков МЭСМ.

В.С. Королюк в 1958 году [47] ввел в рассмотрение функции именования и - обратную - разыменования, что позволило ему использовать на уровне абстрактных алгоритмов операции взятия значения по адресу, рассмотрения значения как адреса другого значения (косвенная адресация) и засылки значения по адресу. Указанные функции он назвал адресными функциями. С их помощью В.С. Королюк смог точно описать такие аспекты управляющих действий в программах, как настройка программы на место в памяти, вычисляемый переход, индексная арифметика, переадресация и формирование адресов, например, при вызове параметра подпрограммы по адресу [48]. В результате получился своеобразный язык программирования, содержащий только операторы присваивания с выражениями, содержащими только скалярные величины, и условными переходами по предикатам. (Таблица 2, IX.) С некоторыми расширениями этот язык, получивший название "адресного языка", был положен в основу целого семейства трансляторов, разрабатывавшихся в течение ряда лет в Киеве под руководством заведующей отделом программирования сначала Вычислительного центра, а затем Института кибернетики АН УССР Е.Л. Ющенко [49]. По стилистике эти трансляторы напоминали автокоды Р.А. Брукера [50]. В одной из первых версий такого транслятора, сделанного для ЭВМ "Киев" (первая крупная ЭВМ, спроектированная вслед за МЭСМ сотрудниками Вычислительного центра АН УССР в 1956-58 годах), впервые в качестве достоинства отмечалась однопроходная схема трансляции, а для записи выражений использовалась обратная польская запись [51].

В рамках крупноблочного программирования была создана серия экспериментальных прикладных программ, главным образом, в недрах лаборатории приближенных вычислений ЛОМИ. В этих системах получили определенное развитие принципы оперирования со структурными объектами: использование вырезок в работе с массивами [52.1], "геометрические операции" композиции массивов и теоретико-множественные операции над ними [52.2], а также были реализованы правила аналитических выкладок над некоторыми объектами анализа, в частности, весьма развитая система для работы с полиномами [52.5].

Перечисляя системы программирования, относящиеся к тому или другому из первых четырех методов программирования (см. начало раздела), следует отметить, без какой бы то ни было утайки, что их влияние на повседневную практику программирования в то время было хотя и существенным, но не подавляющим. Во-первых, в то время еще не сложилось понятие программного продукта, и первые системы программирования, за исключением некоторых библиотек стандартных подпрограмм, были еще практически неотчуждаемы от своих авторов. Во-вторых, машины БЭСМ-2 и "Стрела" не имели буквенно-цифрового ввода и вывода, и необходимость числовой кодировки буквенных текстов символических программ приводила опытных программистов к убеждению, что восьмеричное кодирование машинной программы по аккуратной блок-схеме не менее эффективно, чем числовое кодирование любой символической схемы программы. Эта старая гвардия производственных программистов первого поколения формировала общественное мнение почти до 60-х годов. Другим их принципиальным аргументом было требование полного контроля над исполняемой программой. Эти взгляды, хотя и в новых формах, но те же по существу, были позднее переданы новому поколению несгибаемых "ассемблерщиков", которые и в наше время одновременно являются и носителями консервативной традиции и источниками проблематики для неуемных "автоматизаторов" программирования.

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

В ПП-2 В.С. Штаркман реализовал применяемый и поныне метод экономии рабочих ячеек на линейном участке программы, основанный на возвратном просмотре команд линейного участка [42.6].

В ПП-2 был также реализован метод вычисления логических выражений в виде последовательности логических проверок с передачей управления сразу, как только становится ясным значение еще недовычисленного выражения [42.3].

В ПП БЭСМ был реализован придуманный Л.Н. Королевым метод декомпозиции арифметических выражений в трехадресный код с учетом приоритета операций и с использованием стека (получившего название "полупрограммы"). Декомпозированное выражение представлялось в виде списочной структуры, когда в позиции адреса промежуточного результата ставилась ссылка на команду, вычисляющую этот результат [39].

В ПП БЭСМ была реализована универсальная схема построения операторов цикла с рядом оптимизаций (контроль числа повторений по переменной команде, совмещение восстановления по внутреннему параметру с переадресацией по внешнему и т.д.) [39].

При программировании циклов в ПП БЭСМ применялся метод, получивший впоследствии название метода решающих таблиц. Имелось 12 способов реализации зависимости переменного адреса от параметра, выбор которых проводился по таблице решений, входом в которую были значения четырех двоичных признаков ([39], стр. 49-50).

В ПП-2 осуществлялась экономия совпадающих выражений в пределах выражения, а в ПП БЭСМ - в пределах линейного участка.

В трансляторе МГУ был реализован алгоритм экономии совпадающих выражений в пределах линейного участка с учетом альтернативных ветвей в условных выражениях (допускающихся в том трансляторе), ассоциативности операций и перемены знака выражений [43].

В трансляторе ППС был реализован частичный синтаксический контроль с использованием матрицы попарной сочетаемости элементарных символов входной программы [40].

АЕ рассмотрел задачу декомпозиции арифметического выражения как оптимального упорядочивания дерева формулы с сохранением заданного частичного порядка. Введя понятие "ширины" декомпозиции как максимального числа информационных связей от результата к аргументу, он нашел алгоритм упорядочивания, дающего минимальную ширину для бесповоротных выражений [53].

Охарактеризуем результаты, относящиеся к проблемам представления, поиска и занесения информации.

ШБ в 1952 г. предложил универсальный способ манипулирования с множествами, являющимися подмножествами некоторого генерального занумерованного множества {m1, ..., mn}. Любое такое множество {mi1, ..., mik} изображается двоичным вектором |σ1, ..., σn|, где σi1= ... =σik=1, а остальные равны нулю. Такой вектор получил название логической шкалы. Пересчет и теоретико-множественные операции над множествами в таком представлении удобно сводились к машинным операциям сдвига, нормализации и поразрядным логическим операциям [33].

В ПП БЭСМ АЕ выдвинул в качестве общего правила принцип "адресной кодировки" различных объектов, с которыми приходится иметь дело при трансляции. При такой кодировке всюду, где это имеет смысл, объект кодируется адресом ячейки, содержащей информацию об этом объекте. Такая кодировка существенно сокращает время поиска информации и хорошо соответствует структуре оперативной памяти с произвольным доступом [28.3]. Сейчас такие коды естественно назвать "квалифицированными указателями".

Мы уже упоминали о введенной Л.В. Канторовичем концепции дескриптора (справки) как объекта фиксированного формата, концентрирующего в себе описание способов доступа к компонентам динамического структурного объекта (величины) [28.4].

В 1957 г. АЕ независимо, хотя и позднее ИБМ-овских сотрудников, придумал функцию расстановки как способ беспереборного поиска информации по ключу, исследовал экспериментально ее статические свойства и применил ее для алгоритма экономии команд, работающего за линейное время [53].

В 1957 г. Л.Н. Королев в рамках экспериментов по машинному переводу, выполнявшихся в ИТМ и ВТ, разработал методы ускорения ассоциативного поиска в файлах словарного типа, а также способы сжатия ключевых слов без потери однозначности [54, 55].

В конце 50-х годов группа московских математиков занялась вопросом программирования шахматной игры. Через 16 лет эти исследования завершились выигрышем 1-го всемирного чемпионата шахматных программ, происходившего в Стокгольме в 1947 г. во время Конгресса ИФИП. Одной из важных компонент последовавшего успеха было глубокое изучение вопросов организации информации в памяти ЭВМ и разработка эвристик поиска, требующего перебора. Г.М. Адельсон-Вельский и Е.М. Ландис изобрели двоичное дерево поиска (дихотомическая справочная) [56], а А.Л. Брудно независимо от Дж. Маккарти придумал -эвристику для сокращения перебора на дереве игры [57].

В обсуждаемый период времени в Советском Союзе были выполнены работы, развитие которых привело к созданию теории схем программ - важному разделу теоретического программирования, или, выражаясь в англоязычной терминологии, математической теории вычислений.

Первые существенные результаты в этом направлении принадлежат Ю.И. Янову, который в 1953 году стал аспирантом А.А. Ляпунова и работал под его научным руководством. Опираясь на понятия операторного метода и выделение логической структуры программы в отдельную конструкцию, он пришел к формализации понятия схемы программы, вошедшую в литературы под названием "схемы Янова". Для этого класса схем Ю.И. Яновым была построена полная теория, содержащая алгоритмическое решение проблемы эквивалентности схем и полную систему преобразований эквивалентных схем. Результаты были анонсированы в совместном докладе А.А. Ляпунова и Ю.И. Янова на конференции 1956 года [28.1], а полное название результатов было опубликовано в первом выпуске "Проблем кибернетики" [58].

Результаты Ю.И. Янова породили целую серию исследований, в которых в рамках либо формализма Ю.И. Янова и его непосредственных обобщений, либо более общей символики А.А. Ляпунова предпринимались попытки построить более содержательную теорию. Возможные классы содержательных преобразований схем программ А.А. Ляпунова рассмотрела Р.И. Подловченко, также учившаяся в аспирантуре у А.А. Ляпунова с 1953 г. [59].

А.Н Криницкий в своей диссертации [60], выполненной под руководством А.А. Ляпунова, ввел в схемы программ имена величин, создав формализм, по существу совпадающий с современным понятием стандартных, или "алголоподобных" схем. В этом формализме он построил полную теорию схем без циклов, доказав для них разрешимость распознавания функциональной эквивалентности и построив полную систему преобразований [61].

Весьма полезной оказалась небольшая работа 1957 г. киевского математика Л.А. Калужнина "Об алгоритмизации математических задач" [62], в которой он в некотором смысле реабилитировал понятие блок-схемы, показав, что логическая структура программы, представленная в графической форме, служит не только ее наглядным изображением, но и может быть объектом плодотворного математического рассмотрения.

АЕ предложил некоторый метаязык, названный им "операторными алгоритмами", позволяющий формально описывать различные классы программ по отношению к базовой сигнатуре операций и свойствам запоминающей среды [63]. В этом формализме им был описан фрагмент алгоритмического языка и модельная ЭВМ и описаны инварианты, позволяющие вводить отношение эквивалентности между программами, выраженными в этих языках разного уровня. Кроме того им были доказаны свойства алгоритмической полноты некоторых минимальных сигнатур операций.

Э.З. Любимский, в своих поисках входного языка систем программирования более высокого уровня, свободного от "переопределенности" алгоритмических предписаний, высказал идею так называемой "параметрической записи" математических задач, когда задача представляла собой неупорядоченную совокупность расчетных формул. Каждая формула содержала в качестве свободных переменных "параметры", которые либо представляли элементы тех множеств, на которых эти формулы должны многократно (с помощью квантора "для всех") применяться, либо были аргументами особого "пускового" предиката. Этот предикат, "перманентно" вычисляясь, сигнализировал своим значением истинности, что "защищаемая" им формула может вычисляться. Если не считать нескольких публикаций [64, 65], эта идея не получила немедленного развития и нашла более позднее перевоплощение в концепциях "пусковых функций" параллельного программирования [66] и "охраняемых командах" Э. Дейкстры [67]. В 1958 году состоялись первые личные контакты советских программистов с их американскими и английскими коллегами. В июне 1958 г. по приглашению проф. Дж. В. Карра III в США для участия в Летней школе Мичиганского университета прибыла делегация из СССР, возглавляемая академиком А.А. Дородницыным. Л.Н. Королев, бывший членом делегации, выступил с лекцией, в которой он дал краткий обзор советских работ по трансляторам [68].

В ноябре 1958 г. АЕ в составе советской делегации по автоматизации выступил на известной конференции по механизации процессов мышления в НФЛ в Теддингтоне. Там он встретился с Джоном Бэкусом и Грейс М. Хоппер. Темой доклада АЕ был обзор трансляторов, разработанных в Вычислительном центре АН СССР [69], а также изложение некоторых результатов по теоретическому программированию. Сокращенное изложение доклада позднее появилось в журнале "Дейтамейшн" [70].

В августе 1958 г. Советский Союз посетила ответная американская делегация из 4-х человек, возглавляемая профессором Дж.В. Карром. Профессор Карр выступил с докладами по новой американской машине СТРЕТЧ, а профессор Алан Перлис привез и подарил "свежеиспеченное" предварительное сообщение о продукции совместного германо-американского комитета - проекте алгоритмического языка АЛГОЛ [71], получившего позднее название Алгол 58.

В результате этих контактов советские программисты познакомились с серией первых американских систем программирования, описание которых было издано в русском переводе в 1961 году [72].

Что же касается Алгола 58, то ему было суждено сыграть в развитии программирования в СССР весьма важную роль. Он явился своего рода центром кристаллизации новой ситуации в программировании, которая созревала в Советском Союзе в преддверии второго поколения ЭВМ.

Л и т е р а т у р а

Ссылки на источники относятся к списку литературы, помещенной в работе А.П. Ершова, М.Р. Шура-Буры "Становление программирования в СССР (переход ко второму поколению языков и машин)". Препринт Вычислительного центра СО АН СССР, Новосибирск, 1976.

Таблица 1

Первые советские ЭВМ

Название

МЭСМ

БЭСМ

М-2

Стрела

Урал

М-3

Руководитель
проекта

С.А. Лебедев

С.А. Лебедев

И.С. Брук

Ю.Я. Базилевский

Б.И. Рамеев

И.С. Брук

Головной экземпляр

1951

1952

1952

1953

1955

1956

Серийная продукция

-

1956
(БЭСМ 2)

-

1953

1956

1957

Адресность

3

3

3

3

1

2

Время тактирующего импульса (мксек)

 

2.5

12.5

   

6

Время основного такта
(мксек)

 

77

220

220

10000

60+30000

Средняя скорость (оп/сек)

 

8000

2000

2000

100

30

Цикл обращения к памяти (мксек)

 

12

25

30

10000

10000

Тип оперативной памяти

триггер. яч.

элт

элт

элт

барабан

барабан

Емкость оперативной памяти (слов)

31 число
63 ком.
100 счит.

1024+
376
счит.

512

1024+
496 счит.

1023

2048

Разрядность слова (бит)

21

39

34

43

35

30

Арифметика
(запятая)

фикс

плав

фикс
плав

плав

фикс

фикс

Количество ламп

3800

4000

1879

8000

870

805

Барабан
(слов)

2500

5120

512

 

1023

2048

Лента (слов)

 

4х30К

50К

2х100К

40К

 

Ввод

ручной

П/Л

П/Л

П/Л

П/Л

П/Л

Вывод

таб.*
печ.

таб
печ.
фото.
печ.

Т/Т

П/К

таб.
печ.

таб.
печ.

Источник

[28]

[28]

[28, 31]

[28]

[28]

[28, 32]

*- табуляторная

Уже в ранних работах А.П. Ершов всегда касался предыстории вопроса, которому он посвящал исследование1. В своей первой монографии он коротко описывает вклад всех участников проекта в разработку ПП для БЭСМ, ссылается на отечественный и зарубежный опыт, который был тогда еще невелик. Работы Вычислительного центра АН СССР в области автоматизации программирования были освещены им также в одноименном докладе на Теддингтонском международном симпозиуме по механизации процессов мышления (Лондон,17 ноября, 1958)2.

А.П. Ершов, работы которого относились почти к двум третям всего периода развития программирования и, в значительной степени, были обусловлены общим ходом развития этих идей и методов, постоянно возвращался к истокам. Во введении к своей докторской диссертации "О некоторых вопросах теории программирования и конструирования трансляторов" (1966) он излагает основные вехи развития теории и автоматизации программирования3. Ранее им была написана статья "Альфа-рождение" для газеты "Наука в Сибири", в которой он с чувством гордости подводил итог пятилетней упорной работы большой группы сотрудников Вычислительного центра СО АН СССР - отдела программирования ВЦ СО АН, колыбели сибирской научной школы информатики и программирования4.

С 1972 года велись переговоры об участии А.П. Ершова в XXXI Дибольдовской конференции, о чем свидетельствовала активная переписка с Генри Шервудом, вице-президентом компании Diebold Europe. Перебрав различные варианты возможного выступления, А.П. Ершов решил "дать внутренний взгляд на развитие вычислительного дела в СССР". В апреле 1974 года Андрей Петрович подготовил план доклада "Развитие вычислительного дела в СССР", подлежащего прочтению на этой конференции. Работа продвигалась успешно, в начале июня был готов ее перевод на английский язык. Конференция состоялась 9-18 июня 1974 года в Риме. А.П. Ершов был единственным представителем своей страны, его доклад имел успех. Он был прочтен не только на самой конференции, но и в штаб-квартире компании Оливетти. Кроме того, через год, в августе, он был заслушан на заседании Комиссии по вычислительной технике АН Баварии, переведен на польский язык.

Доклад "Развитие вычислительного дела в СССР" состоял из двух частей: в первой части А.П. Ершов сделал исторический обзор развития вычислительной техники, программного обеспечения, применения ЭВМ, профессиональной подготовки программистов, дал периодизацию истории развития ЭВМ в нашей стране. Во второй части он остановился на текущем состоянии дел, подробно рассказал о некоторых государственных программах в области вычислительной техники, состоянии машинного парка, ПО, ОС и т.д. Он особо подчеркнул, что некоторое время Советский Союз должен был развивать все аспекты вычислительного дела, опираясь исключительно на свои интеллектуальные и технологические ресурсы5.

В мае 1974 года, в момент подготовки доклада для конференции в Риме, А.П. Ершов получил письмо из Лос-Аламосской научной лаборатории Калифорнийского университета с предложением принять участие в международной конференции по истории вычислительного дела, проведение которой намечалось на июнь 1975 года. Андрея Петровича заинтересовало это предложение, и он дал предварительное согласие на участие в конференции. В сентябре 1974 года А. П. Ершов написал Президенту АН СССР академику М.В. Келдышу, что, по его мнению, "начальный период становления и развития советской электронной техники (1948-1958) как в области структур ЭВМ, так и, и в особенности, в области программирования, содержит много серьезных и оригинальных научных достижений, которые могут и должны быть предметом серьезного историко-научного исследования".

Андрей Петрович писал: "Я имел беседу с Михаилом Романовичем Шура-Бурой, который высказал такую же точку зрения и проявил интерес к возможному участию в этой конференции. Конкретно идея состоит в том, чтобы М.Р. и я провели совместную работу и подготовили бы доклад с условным названием "Становление и начальное развитие методов программирования в СССР" имея ввиду персональное участие М.Р. Шура-Буры в конференции (при всем моем интересе к теме я выехать в США в июне 1975 г. не имею возможности)"6. Очевидно, "добро" было получено, и авторы приступили к работе. Структура "Становления" отличалась от предыдущей работы на эту тему и представляла собой почти хронологическое изложение событий. Временной промежуток охватывал период с послевоенного до начала 1960-х гг.

Несмотря на то, что конференция по истории вычислительного дела была перенесена на лето 1976 года, ни А.П. Ершов, ни М.Р. Шура-Бура не смогли поехать в Лос Аламос. Один по семейным обстоятельствам, другой - по причине особого режима работы. "Становление программирования в СССР" было издано в виде двух препринтов ВЦ СО АН СССР в 1976 году и в сокращенном варианте в журнале "Кибернетика"7. Эта публикация, видимо, вызвала неоднозначную реакцию. Ершов сообщал в письме Н. Метрополису: "Опубликовав свои изыскания (по истории программирования) в журнале "Кибернетика" я пережил бурю"8. Можно предположить, что причиной такой реакции был критический анализ результатов отечественного программирования и его вклада в мировую науку, который авторы сделали в заключение своей работы9.

Прежде чем эта работа была переведена на английский язык и опубликована за рубежом, прошло четыре года. В письме к Д. Кнуту Андрей Петрович писал: "Я попал в нелепый тупик с нашим докладом для конференции по истории вычислений. Вместе с этим письмом я посылаю Вам его русский текст, изданный в виде препринта. Воодушевленный Вашим интересом к нашему докладу и любезным согласием редактировать авторский перевод, я, воспользовавшись приездом в СССР в августе прошлого года Джекоба Шварца и Никласа Метрополиса в составе американской делегации по языкам весьма высокого уровня, попросил Шварца осуществить беглое редактирование и печать рукописного текста в его офисе. Шварц любезно согласился и выделил для этого дела своего ученика Кена Кеннеди (он сейчас в Рочестерском университете). К несчастью, месячная (по моим понятиям) работа превратилась в восьмимесячную эпопею, которой не видно конца. Кеннеди редактирует очень "агрессивно" - просто переписывает текст - и, с другой стороны, делает это очень медленно. Я пишу все это для извинительной информации и, кроме этого, в надежде на подтверждение Вашего согласия прочитать английский текст, если отредактированный перевод окажется неадекватным и потребует дальнейшей правки или если мне придется забрать текст у Кеннеди"10. Дело продвигалось медленно, но верно, перевод был завершен К. Кеннеди, и работа попала в труды Лос-Аламосской конференции, которые вышли только в 1980 г.11.

И, наконец, в 1976 году состоялась длительная поездка А.П. Ершова в Великобританию, где ему были вручены атрибуты звания Выдающегося члена Британского вычислительного общества. Во время продолжительного Британского тура он прочел цикл из четырех лекций, две из которых - "Краткий очерк по истории вычислительного дела в СССР" и "Первые советские компьютеры" - были подготовлены на основе вышеописанных материалов.

История вычислительного дела в нашей стране вызывает неизменный интерес. Появляются все новые исследования, виртуальные экспозиции, но, к сожалению, авторы слабо опираются на работы, которые по праву можно считать классическими. Никто из исследователей не сделал попытки описать и проанализировать историю вычислительной техники и программирования в нашей стране так, как это сделали в свое время А.П. Ершов и М.Р. Шура-Бура.


1 Ершов А.П. Программирующая программа для быстродействующей электронной счетной машины. - Москва. - 1958. - 115 с.
2 Ershov A.P. The works of the Computing Centre of the Academy of Sciences of the USSR in the Field of Automatic Programming// Архив А.П. Ершова - Папка 10. - Лл. 145-176.
3 Ершов А.П. О некоторых вопросах теории программирования и конструирования трансляторов. Диссертация, представленная на соискание степени доктора физико-математических наук. Новосибирск. - 1966. - С.5-10.
4 Ершов А.П. Альфа-рождение. - За науку в Сибири. - 1965. -- 18 янв.
5 Computing Development in the USSR// Conference proceedings. Meeting XXXI, Rome, 11-13 June, 1974. - The Diebold Research Program. - S. 1. - 1974. - P. 114-123.
6 Письмо А.П. Ершов - М.В.Келдыш. 13.09.1974// Архив А.П. Ершова. - П. 105. - Л.150.
7 А.П. Ершов, М.Р. Шура-Бура Становление программирования в СССР: Начальное развитие. - Новосибирск,- 1976. - 49 с. - (Препр./ АН СССР, Сиб. отд-ние: ВЦ; № 12). Становление программирования в СССР: Переход ко второму поколению языков и машин. - Новосибирск, 1976. - 42 с. - (Препр./ АН СССР, Сиб. отд-ние; ВЦ; № 13). Пути развития программирования в СССР// Кибернетика. - 1976. - № 6. - С. 141-160.
8 Письмо. А. П. Ершов - Н. Метрополис, 09.02.1978// Архив А.П. Ершова. - Папка 129- Лл. 118-119.
9 А.П. Ершов, М.Р. Шура-Бура Становление программирования в СССР: Переход ко второму поколению языков и машин. - Новосибирск, 1976. - 42 с. - (Препр./ АН СССР, Сиб. отд-ние; ВЦ; № 13). - С.24.
10 Письмо. А.П. Ершов - Д.Кнут. 07.04.1977// Папка 129. - Лл. 227-228.
11 Ershov A.P. The Early Development of Programming in the USSA// A History of Computing in the Twentieth Century: A Collection of Essays. - New York a.o., 1980. - P. 137-196. - (Jt. auth. M.R. Shura-Bura).

А.П. Ершов
ПРОГРАММИРОВАНИЕ - ВТОРАЯ ГРАМОТНОСТЬ

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

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

А.П. Ершов. Программирование - вторая грамотность Во-первых, нам будет легче сравнивать программирование с грамотностью, если мы вспомним, что грамотность - это историческая категория, имеющая свое предначало, возникновение и развитие. СССР - страна практически сплошной грамотности: уже 10 лет назад грамотные в ней составляли 99,7 % общего числа населения в возрасте от 9 лет и старше. 100 лет назад этот процент был чуть выше 20 %. Еще сейчас на Земле насчитывается порядка 800 млн. неграмотных.

Во-вторых, как в основе грамотности, так и в основе программирования лежит техническое изобретение: печатный станок и ЭВМ соответственно. Если развитие и распространение книгопечатания привело к всеобщей грамотности, то развитие и распространение ЭВМ приведет ко всеобщему умению программировать.

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

В-четвертых, и это, пожалуй, самое главное: грамотность и программирование не только выстраиваются в параллель, соединяясь мостиками аналогий, но и дополняют друг друга, формируя новое представление о гармонии человеческого ума.

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

Мы привычно понимаем грамотность, как способность человека воспринять и выразить знание в текстовой форме. С детства мы слышим простые и емкие слова Максима Горького: "Любите книгу, источник знания". Однако остается проблема: как перейти от знания к действию. "Сообразуйте действие со словом, а слово с действием", - говорит один из героев Шекспира. Вот здесь и возникает программирование.

А.П. Ершов. Программирование - вторая грамотность В докнижный период единство слова и дела осуществлялось естественно и постоянно. Накопление опыта и знания было совмещено с прямым и постоянным контактом старшего учителя и младшего ученика.

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

А.П. Ершов. Программирование - вторая грамотность Появление книги нанесло сильнейший удар единству слова и дела, отделило процесс накопления знаний от их применения, создало новые формы жажды и знаний и новые ощущения постижения истины.

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

А.П. Ершов. Программирование - вторая грамотность Как сказал Монтень уже в 16 веке: "Ученость чисто книжного происхождения - жалкая ученость!" Действительно, обнаружилось, что книжное накопление знаний требует новых подходов к формированию исполнительных механизмов человека. Это означает, что задача программирования появилась задолго до появления ЭВМ. Появление ЭВМ актуализировало проблему программирования так же, как книгопечатание актуализировало проблему грамотности.

Если вторая проблема привела к появлению Яна Амоса Каменского и его "Великой дидактики" и "Материнской школы", заложивших основы современной школы, то первая проблема - это вызов нашей аудитории, и я горячо надеюсь, что она выдвинет великого учителя, который вооружит поколение, вступающее в 21-й век, видением школы будущего.

А.П. Ершов. Программирование - вторая грамотность Грамотность и способность к действию сами по себе еще ничего не значат. Развитие только одной из них еще не решает проблемы. В этом противопоставлении трудно сказать, от чего мы страдаем больше: от невежества или бездеятельности. Еще Гете предупреждал: "Нет ничего страшнее деятельного невежества", однако наш опыт подсказывает, что оно произрастает только при дефиците активной жизненной позиции образованных и культурных людей. Мы знаем, что грамотность - это не только умение читать, но и воспитание интеллигентного человека.

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

МИР КНИГИ

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

"КНИГА, печатное произведение (в старое время также и рукопись) в форме сброшюрованных и переплетенных вместе печатных листов...

В средние века книги переписывались в монастырях монахами и имели, главным образом, религиозный характер. С развитием городов сменившие монахов городские писцы переписывали и светские книги. Настоящий поворот в книжном деле произведен книгопечатанием, изобретенным в середине 15-го века... Отливка шрифтов, изобретение скоропечатающей машины, стереотипы, применение наборной и ротационной машин превратили книгу в могучее средство распространения знаний и подъема культуры" (Малый энциклопедический словарь, Москва: Советская энциклопедия, 1936 г.)

Мне бы хотелось верить, что наше трудное дело создания ЭВМ и их программирования когда-нибудь будет подытожено далеким потомком в столь лапидарных и эпических строчках. Мне довелось прочитать несколько сочинений, посвященных истории книги и развитию грамотности. Это в высшей степени интересная глава в истории нашей цивилизации. Несмотря на то, что становления книгопечатания и вычислительной техники разделены периодом в пять столетий, их сопоставление, особенно если выровнять временные масштабы с учетом разницы скоростей и пропускной способности коммуникационных каналов, обнаружит много сходства и технического, и социального характера. В способах книгопечатания мы найдем смену поколений, основанную на изменениях производственной базы и технологических процессов. Так же, как и в вычислительном деле, мы познакомимся с историей становления больших производящих компаний со всеми типичными компонентами массового производства: неустанная ассимиляция технических новшеств и их переплавка в общепринятые технические стандарты, организация рынка и сбыта, драматические столкновения в сочетании с неотъемлемостью сосуществования большого и малого бизнеса, появление вторичной индустрии исходных материалов и компонент.

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

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

Появление первых изданий изобретателя печатного станка Иоганна Гутенберга датируется 1445 годом (латинская грамматика "О восьми частях речи" Элия Доната и знаменитая "42-строчная" Библия). Еще не истек XV век, а в уже мире работало свыше тысячи типографий, выпустивших около 10 млн. экземпляров книг, почти мгновенно превысив наличный фонд рукописных книг. В 1962 г. во всем мире было напечатано 10 млрд. книг. Характерным является то, что не видно никаких реальных признаков насыщения книжного рынка.

Данные 1962 г. говорят, что каждый житель Земли приобрел в среднем две книги. Средняя семья в СССР покупает в год около 30 книг и готова покупать больше. Простая экстраполяция этих цифр дает оценку потенциального книжного потребления для нынешнего населения в 40 млрд. книг в год.

Есть, как мне кажется, глубокие аналогии между книгой и ЭВМ как продуктом и их общие отличия от остальных изделий. Все остальные изделия носят специализированный характер, рассчитаны на некоторую функцию. Отношение объема производства такого продукта к числу потребителей выражается малой константой. С книгами и ЭВМ дело обстоит по другому. И книги, и вычислительные машины являются носителями информационной модели внешнего мира во всем его разнообразии и изменчивости. Здесь не приходится рассчитывать на то, что пытливость и любознательность человека найдут свой предел.

Я позволю себе еще раз коснуться опыта СССР, чтобы показать взаимозависимость между грамотностью и книгопечатанием за последнее столетие (данные по изданиям "Советской энциклопедии").

Если мы поверим в справедливость наших аналогий, то тогда анализ этой таблицы даст нам некоторое представление о размахе и объеме работы, которую надо предпринять для подготовки встречи мира ЭВМ с миром людей.

МИР ЭВМ

А.П. Ершов. Программирование - вторая грамотность Средства массовой информации, научно-популярные издания и рекламные проспекты, несмотря на короткий век ЭВМ, уже создали у нас некоторое клише, привычное видение вычислительной машины. Его атрибуты - экран и клавиатура дисплея, бобины магнитных лент, кружево перфоленты, полотно длинных выдач с АЦПУ, мигающие огоньки инженерного пульта, угловатые шкафы, забитые электронными деталями. На техническом языке все это объединяется одним термином: установка (main frame). Если, однако, думать о месте ЭВМ в мире человека на основе этого представления, это будет не только поверхностно, но и ошибочно. Машина будущего - это не только и не столько гигантский электронный мозг, заполняющий охраняемое здание планирующего центра, промышленной дирекции, банка или командного пункта, а прежде всего, крошечный срез кристалла кремния в миниатюрной рамке, опутанной паутиной тончайших проводов, вставленный в укромное место практически любого промышленного изделия.

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

  • Информационно-вычислительная мощность с показателями: по скорости - 100 тыс. операций в секунду, по емкости оперативной памяти - 5 тыс. чисел (слов) и по емкости внешней памяти в число знаков, образующих книгу средней величины, помещается в объем величиной со спичечный коробок, стоит примерно один человеко-день труда и может производиться практически в неограниченных количествах.
  • Микропроцессор, сопряженный с промышленным изделием - потребительским товаром или средством производства, - придает ему совершенно новые качества и сильно влияет на характер взаимодействия человека с изделием.
  • Не менее сильно включение микропроцессора в схему изделия влияет на способ его проектирования, во время которого должны быть найдены, осмыслены и реализованы отмеченные выше новые качества изделия.

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

Тысячи профессий меняют свое лицо. Миллионы людей - операторов производства, наладчиков, машинисток, банковских служащих, продавцов-контролеров, библиотекарей, монтажников, секретарей, сборщиков на конвейере - садятся за полностью переоборудованные рабочие места, на которых ЭВМ становится их партнером и собеседником. И если даже этот партнер дружествен и надежен, у работника должна произойти глубокая психологическая и квалификационная перестройка для того, чтобы сохранить свою целостность и достоинство в этой новой обстановке. Мы уже сейчас говорим о миллионах людей, вовлеченных в этот процесс (в одной Западной Европе число терминалов ЭВМ и линий передачи данных приближается к миллиону), а через пару поколений это коснется практически каждого человека, вовлеченного в общественное производство.

На пути этого экспоненциального развития, подстегиваемого самыми разнообразными факторами, возникает, однако, одно принципиальное препятствие. В настоящее время способность человека к передаче знаний машине безнадежно отстает от способности создать эту машину. Если затраты общественного труда на создание микропроцессора исчисляются в человеко-часах, то затраты на создание программного обеспечения до сих пор выражаются в человеко-месяцах, даже с учетом тиражирования программ. Логистическая кривая Барри Боэма, показывающая динамику соотношения затрат на оборудование и программы при проектировании системы обработки информации, стала благодаря бесчисленным повторениям настолько привычной, что уже не вызывает никакого беспокойства. Конечно, специалисты по программированию трудятся вовсю, чтобы сделать труд программиста более производительным. Однако даже если мы примем гипотезу десятикратного увеличения производительности труда при производстве программ, элементарные расчеты показывают, что для того чтобы через двадцать лет запрограммировать все производимые микропроцессоры, нам надо будет посадить за программирование все взрослое население земного шара.

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

"В будущем всякий человек, полностью несведущий в естественных науках, окажется, честно говоря, необразованным. И если он будет, как делают это сейчас некоторые, кичиться своей неосведомленностью, он окажется точно в таком положении, как неграмотные средневековые бароны, гордо заявлявшие, что счетом и письмом у них занимаются секретари..."

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

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

Таким образом, мы переходим от мира машин к миру программ.

МИР ПРОГРАММ

Герой Мольера, месье Журдэн, был в высшей степени удивлен, когда узнал, что всю жизнь говорил прозой, не подозревая этого. Благодаря появлению ЭВМ и вызванному этим появлением возникновению вычислительной науки, или информатики, человечество оказывается в положении месье Журдэна, с удивлением обнаруживая, что оно живет в мире программ и что продуктивность информационных моделей внешнего мира придает новый смысл библейскому высказыванию "Вначале было слово".

Да, мы живем в мире программ, и сами постоянно программируем, не сознавая этого.

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

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

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

Даже обучение, то есть приобретение знаний или, скорее, способности что-то сделать, - это программирование. Лет десять назад профессор Массачусетского технологического института Сеймур Пейперт, один из первых психологов и педагогов, взявший на вооружение концепции программирования, в серии своих работ убедительно показал, что ребенок научается что-то делать только после того, как он поймет, как это делается. Только после выработки такого понимания повторная тренировка достигает успеха. Заметим, что это касается не только программ, представляющих собой цепочки логических реакций на заранее известные стимулы, но и программ реального поведения, включая всяческую моторику (спорт, музыка, игры и т.п.).

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

Мы жалуемся на социальные болезни века, в частности абсентеизм, пассивность, ратуем за формирование активной жизненной позиции. Что это такое? Попросту говоря, это способность выработать программу действия и следовать ей.

Таким образом, мир программ - это далеко не только начинка памяти ЭВМ. Это прежде всего огромный запас операционного знания, накопленный человечеством и теперь лишь актуализируемый вычислительными машинами, роботам, автоматическим устройствам. Еще более огромный запас программ хранится в генофонде всего живого: его расшифровка и использование в значительной степени составляют предмет биологии и ее новых разделов, включая генную инженерию. Психология развития и теория поведения тоже в значительной степени формируют новые представления, сближающиеся с понятиями программирования.

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

Хотелось бы подчеркнуть, что речь идет не о том, чтобы навязать детям новые, несвойственные им навыки и знания, а о том, чтобы проявить и сформулировать те стороны мышления и поведения, которые реально существуют, но формируются стихийно, неосознанно.

Рассмотрим, каковы же предпосылки и препятствия к осуществлению этого плана?

ОБЩАЯ ЗАДАЧА ОБУЧЕНИЯ ПРОГРАММИРОВАНИЮ

А.П. Ершов. Программирование - вторая грамотность Итак, мы хотим учить детей законам программирования. Еще не зная их, мы понимаем, что они неизбежно будут выражены в сумме некоторых достаточно специфических приемов. Нам еще предстоит разбираться, в какой мере они посильны детям, но общие наблюдения таковы, что интеллектуальный и операционный потенциал детей далеко не исчерпан. Посмотрите, как помолодели за последние годы технические виды спорта, в особенности, плавание, гимнастика. Не знаю, как на Западе, но у нас автомашины еще дороги и люди зачастую накапливают деньги для их покупки, когда уже, как говорится, лучшие годы позади. Многие с горечью спрашивают, сколько жизней, потерянных из-за дорожных происшествий мы сберегли бы, если бы все без исключения научились водить машину в 14-15 лет.

Нет, однако, никакой возможности нагружать детей конденсатом всего жизненного опыта, которым обогащено человечество. В этих попытках нас подстерегают и другие опасности. Каждый человек в СССР знает детскую песенку, которую поет Алла Пугачева, о горестной жизни школьника:

Нагружать все больше нас
Стали почему-то.
Нынче в школе первый класс
Вроде института.
Не бываю я нигде,
Не дышу озоном,
Занимаюсь на труде
Синхрофазотроном.
То ли еще будет,
То ли еще будет,
То ли еще будет, ой-ой-ой.

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

Этот импринтинг детских лет происходит, естественно, со всеми; можно сказать, что каждый из нас является Маугли своего детства, все дело в том, что с нами происходит и чему нас учат в эти годы.

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

Законы программирования, законы обработки информации, по моему убеждению, существуют. С одной стороны, они появляются в форме операционных правил, отражающих непосредственный опыт человечества. Все мы знаем знаменитое римское изречение "Разделяй и властвуй", воспринимая его, главным образом, как образец политического цинизма. Однако лишь только современная математика и программирование придали ему (в виде метода ветвей и границ) совершенное выражение мощного по своей силе и продуктивности эвристического принципа решения задач. Каким бы случайным этот пример ни оказался, он иллюстрирует важное положение о глубокой и нерасторжимой связи операционного знания и алгоритмического мышления с другими компонентами образования.

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

На меня всегда производит сильное впечатление один простой пример задачи на программирование как демонстрация перехода от знания к действию. Я выпишу последовательные этапы перехода от спецификации, выражающей знание, к программе, выражающей действие, для задачи возведения числа x в целую степень n:

А.П. Ершов. Программирование - вторая грамотность

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

ЭВМ В ШКОЛЕ

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

Есть, конечно, очень активно высказываемое мнение, что ЭВМ с программой это то же самое, что и задача с известным решением, и появление электронного помощника воспитает леность ума и ничего больше. Одна из лучших, на мой взгляд, юмористических картинок последних лет (журнал "Нью-Йоркер") изображает бедного Джонни, уныло глядящего на кучку карманных калькуляторов перед ним, и не менее измученную маму, терпеливо повторяющую свой вопрос: "Ну, посмотри, если у тебя пять карманных калькуляторов, и я возьму два, то сколько у тебя останется?.."

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

Методы и приемы активизации обучения с помощью ЭВМ неисчислимы: они ограничиваются только пределами нашей фантазии и степенью конкретного знания детской психологии.

В школе № 130 Новосибирска половина класса выучила исторические даты назубок, когда один из юных программистов спроектировал для ЭВМ базу данных по историческим датам и загрузил ее, а другой, подвергнув учительницу экзамену с помощью ЭВМ, поймал ее несколько раз на неточностях.

Какая-то компания выпустила на рынок игру-компьютер, которая проверяет спеллинг английских слов. С помощью синтезатора речи слово произносится, ребенок набирает это слово по буквам, машина проверяет и реагирует. В карманную игру трудно вложить хороший синтезатор речи, но авторы обратили его недостаток в достоинство, сделав его очень похожим на голос Буратино. Представляете себе восторг детей, когда игрушка пищит им голосом Буратино: "Пробуй снова, пробуй снова, ты не знаешь это слово!".

А.П. Ершов. Программирование - вторая грамотность Еще одно очень интересное наблюдение. На конкурсных вступительных экзаменах в ВУЗ для абитуриентов установили консультационную информационную систему, реализованную на ЭВМ. Около терминалов всегда толпилась очередь. В интересах ребят рядом посадили двух преподавателей, чтобы разгрузить машину. Преподаватели сидели без дела, а у терминала по-прежнему была очередь. Почему? "А мы не стесняемся перед машиной обнаружить свое незнание, а перед преподавателем стесняемся", - объяснили ребята. Действительно, по многим показателям ЭВМ является гораздо более удобным для детей источником и контролером знаний. С одной стороны, это всезнающий партнер, а с другой всего лишь орудие, вещь. ЭВМ создает игровую обстановку, которая в обучении гораздо ценней реальной жизни тем, что из игры можно выйти, не утратив достоинства. Примеры подобного рода можно было бы умножить.

Есть и более серьезные предпосылки к продвижению ЭВМ в школу. Я уже упоминал о работах профессора Сеймура Пейперт, работающего в Лаборатории искусственного интеллекта Массачусетского технологического института. На недавнем конгрессе ИФИП-80, состоявшемся в Японии и Австралии, профессор Пейперт выступил с докладом "Детство по-новому: присутствие ЭВМ как эксперимент в психологии развития". Этот доклад привлек всеобщее внимание.

Профессор Пейперт предсказывает всестороннее вторжение ЭВМ в мир ребенка, когда машина станет интеллектуальным орудием, применяемым ребенком с той же непосредственностью, с какой он использует перо и карандаш, но с гораздо большим разнообразием. Интерпретируя наблюдения Ж. Пиаже над тем, что ребенок совершает большинство своих интеллектуальных открытий самостоятельно при условии, что окружающий его фон достаточно богат, - профессор Пейперт показал, что компьютеризация этого фона создаст новую, невиданную ранее операционную обстановку, которая потребует новых представлений в психологии развития. В качестве примеров им было приведено значительное ускорение овладения алфавитным языком и более раннее развитие комбинаторных способностей, что позволяет детям овладеть этими фундаментальными умениями практически до вступления в подростковый возраст. Одним из положительных последствий этого изменения может стать преодоление инфантилизма и чувства зависимости, столь характерных для современного городского общества.

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

ЗАКЛЮЧЕНИЕ

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

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

Их реализация ускорит интеллектуальное созревание ребенка, повысит его активность, сделает его лучше подготовленным к профессиональной деятельности, в частности, к осуществлению второй индустриальной революции, вызванной появлением ЭВМ и новых форм автоматизации.

Другими словами, программирование - это вторая грамотность. Это по-прежнему метафора, но которая, как мне кажется, наилучшим образом фокусирует цели и содержание нашей конференции.

Предисловие архивариуса

19 апреля Андрею Петровичу Ершову исполнилось бы 73 года. В преддверии этой даты мы решили поместить на нашем сайте текст его широко известной работы "Программирование - вторая грамотность" с иллюстрациями художника Михаила Златковского.

Выступление А.П. Ершова (keynote speech) на 3-й Всемирной конференции ИФИП и ЮНЕСКО по применению ЭВМ в обучении в свое время получило широкий резонанс, его текст неоднократно издавался на разных языках, но ни разу не был опубликован с иллюстрациями, специально подготовленными для этого доклада, которые мы и предлагаем сегодня вашему вниманию.

Публикация представляется нам тем более уместной, что, как и многие другие работы Андрея Петровича, эта статья сохранила свою актуальность и поныне. Академик Ершов рассматривал программирование как "выражение органической способности человека". И если еще не все человечество погрузилось в написание программ, то "оно живет в мире программ и само постоянно программирует", а "продуктивность информационных моделей внешнего мира придает новый смысл библейскому изречению "Вначале было слово". Двадцать с лишним лет, прошедших со дня написания работы, со всей очевидностью подтвердили справедливость ее основных тезисов.

Мы смогли проследить историю создания этой, может быть, самой знаменитой статьи А.П.Ершова благодаря его архиву, где сохранились и письма, и сами иллюстрации, и многие другие материалы на эту тему.

27 октября 1980 А.П. Ершов получил письмо за подписью Президента ИФИП Пьера Бобилье с приглашением выступить в качестве keynote speaker на 3-й Всемирной конференции ИФИП и ЮНЕСКО по применению ЭВМ в обучении: "Ваши взгляды на роль ЭВМ в обучении будут с признательностью восприняты аудиторией в более чем 1000 человек, которые приедут из 70 стран мира, как развитых, так и развивающихся". Конференция состоялась 27-31 июля 1981 г. в Лозанне (Швейцария).

Сейчас трудно восстановить, как родилась у А.П. Ершова идея столь афористично назвать свою речь, но он настаивал именно на этом названии, хотя Б. Леврат, председатель программного комитета, предлагал другое, гораздо более традиционное: "Основополагающая роль компьютеров в образовании". Из переписки Андрея Петровича мы узнаем, что он был единственным представителем СССР на конференции, что вызвало недоумение организаторов, поскольку не приехали докладчики, чьи работы были приняты и стояли в программе.

Тем более ответственной представлялась Андрею Петровичу его миссия на этой конференции. Отметим в скобках, что, к сожалению, эта ситуация была достаточно типична для того времени. Работы советских ученых принимались на различные конференции, но затем они не приезжали как из-за финансовых обстоятельств, так и по политическим мотивам.

Во время подготовки к выступлению Ершов проводит некоторые изыскания и приходит к выводу, что иллюстративное оформление можно доверить художникам с опытом работы в таком научно-популярном издании, как "Химия и жизнь". Он посылает свой текст главному художнику журнала В.С. Любарову, который посредничал Ершову в поисках иллюстратора. В сопроводительном письме Ершов так обрисовал проблему: "Аудитория будет довольно пестрая и не очень известная. Академическая элита, характерная для конференций по естественным наукам, будет в явном меньшинстве. Большая часть аудитории будет внушаемой, и доклад поэтому подготовлен в стиле наступательной проповеди. Доклад должен быть заведомо респектабельный, без балаганства, но достаточно острый. Однако очень хотелось бы, чтобы риторика текста была бы скомпенсирована живостью иллюстративного материала не говоря уже о двух-трех порциях юмора для разрядки аудитории".

Работа над иллюстрациями была поручена художественному редактору журнала "Химия и жизнь" Михаилу Златковскому. Он подготовил 32 цветных графических листа, которые в острой, ироничной, подчас парадоксальной форме иллюстрировали основные тезисы докладчика. Несомненно, стиль "умной графики", как впоследствии художник назвал свою манеру работы, существенно дополнял выступление академика Ершова и способствовал ее широкой международной известности.

В настоящее время М.М. Златковский, Заслуженный художник России, работает главным художником ежедневной газеты "Новые Известия". Он вице-президент Европейского союза карикатуристов (FECO), Президент Союза карикатуристов России, лауреат 185 международных премий. М. Златковский - обладатель высшей профессиональной премии Союза журналистов России "Золотое перо" (2003 г.) и звания "Лучший художник в средствах массовой информации России" (2004 г.). Он выразил свою готовность еще раз поучаствовать в совместной работе, теперь уже виртуально.

Выражаем признательность Сергею Мыльникову за оказанную помощь при подготовке иллюстраций к публикации.

Страницы