Програміст у великій компанії, Комерція, Різне, статті

Дмитро Долгов
Народився в 1973 році. Закінчив Санкт-Петербурзький Державний Технічний Університет (колишній Політехнічний Інститут) за фахом “Прикладна математика”. Понад 8 років пропрацював в CREAT Studio, де займав пост головного програміста і начальника відділу програмування. Брав участь у випуску ігор для PC, Playstation 2, Xbox і Dreamcast. В даний час працює у відділі ігрових і мультимедійних продуктів фірми “1С”.


Останні 9 років я присвятив індустрії розробки комп’ютерних ігор, пройшовши шлях від молодшого програміста до начальника відділу програмування великої компанії. І більшу частину цього часу стикався з проблемою пошуку кваліфікованих кадрів. Я публікував інформацію про вакансії, вивчав надсилаються резюме, проводив співбесіди і приймав нових програмістів на роботу.


Однією з основних проблем, що виникають в процесі роботи, стала проблема інтеграції нових молодих фахівців в команду при практично повній відсутності у них інформації про правила і принципи колективної розробки програмного забезпечення.


Перейшовши на роботу в фірму “1С”, я зрозумів, що зі схожими проблемами стикаються всі, хто приймає на роботу нових програмістів – студентів або недавніх випускників ВНЗ. Якщо ж мова йде про команду, яка цілком складена тільки з молодих фахівців, наслідки можуть бути просто фатальними. Вже неодноразово доводилося проводити “експрес-курси” для молодих команд-розробників. Причому той хаос, який твориться у відділі програмування, часто намагаються видавати за “нормальний робочий процес”, хоча він насправді викликаний відсутністю базових знань з методології програмування.


У цій статті, написаній за мотивами доповіді на першій міжнародній науково-практичній конференції “Сучасні інформаційні технології та ІТ-освіта”, Я спробую проаналізувати основні “білі плями” в системі освіти.


Взагалі, тема недостатності підготовки молодих фахівців в області програмування – не нова. Із завидною періодичністю на різних форумах (у тому числі і на DTF) виникають бурхливі дискусії на цю тему. На жаль, велика частина цих дискусій зводиться тільки до двох питань: “чи потрібно вища освіта як таке” і “все погано”.


Досить активна дискусія з приводу підготовки нових кадрів для ігрової індустрії розвернулася і на згаданій вище конференції. Я дуже сподіваюся, що багато ідей, висловлені на засіданнях і круглих столах, знайдуть своє відображення у нових навчальних планах і програмах додаткової освіти для підготовки молодих фахівців в області ігрової індустрії.


На жаль, більшість викладаються в даний час навчальних курсів роблять акцент не на методології, а тільки на технічних аспектах кодування – мовах, алгоритмах, стандартних пакетах. В результаті студенти, які приходять на роботу після завершення інституту (або ще під час навчання), виявляються в абсолютно незвичній для себе ситуації. В інституті при вирішенні навчальних завдань в першу чергу потрібно результат – графік, таблиця, звіт. Сама програма тут виступає не як мета, а лише як засіб вирішення задачі. Внутрішня структура програми, як правило, нікого не цікавить; після здачі звіту програма вирушає в сміттєву корзину. Такі програми я буду називати “лабораторними”.


Комерційної програмний продукт пишеться командою програмістів для сторонніх користувачів. Програма повинна працювати на інших комп’ютерах (з довільною конфігурацією і об’ємом пам’яті), повинна мати зручний і інтуїтивно зрозумілий інтерфейс користувача, не містити помилок, що можуть спричинити за собою втрату даних. Як правило, комерційна програма відчужується від розробника, тобто запускається на комп’ютерах, віддалених від місця розробки. Відповідно, програма повинна мати інсталятор і Обновітель версій. При виникненні помилок програміст шляхом простого діалогу з видаленим користувачем, аналізу файлу протоколу і повідомлень програми, повинен мати можливість локалізувати і виправити помилку.


Якщо звести докупи всі основні відмінності лабораторних і комерційних робіт, отримаємо наступну картину:


Лабораторна робота


Комерційна програма


Спробую коротко викласти ідеї, які кілька років тому стали поштовхом до активного розвитку методологічних напрямків на кафедрі “Прикладна Математика” Санкт-Петербурзького Державного Технічного Університету (колишнього Політехнічного інституту).


11 років тому, будучи студентом третього курсу, я вперше зіткнувся з роботою у великій компанії. Японська фірма “Integra” почала розробку нового програмного забезпечення, і частина роботи була замовлена фахівцям з Польщі та Росії (Москви, Петербурга і Новосибірська). Розробку одного з графічних модулів доручили мені. Завдання полягало в генерації списків просторових вокселів, які повністю або частково лежать всередині довільно орієнтованої піраміди зору.


Кілька днів я вивчав дуже жорсткі стандарти кодування фірми “Integra”. Потім тиждень пішов на обговорення із замовниками зовнішнього програмного інтерфейсу, яким повинен був володіти новий модуль. Потім ми довго обговорювали можливі алгоритми реалізації і робили тести на продуктивність. І тільки після цього я приступив до кодування.


Сенс ще одного аспекту проведеної роботи мені був тоді абсолютно незрозумілий. За сусідній комп’ютер посадили мого колегу, який зайнявся реалізацією альтернативного алгоритму. Його завдання було простіше – Треба було написати найпростіший, повільний, але надійний алгоритм генерації списків вокселів. Потім він підключив мій варіант бібліотеки і почав запускати програму, порівнюючи отримані результати. За умовам технічного завдання, швидкий алгоритм не мав права пропускати якісь актуальні воксели, але міг допускати не більше 2% помилкових (не належать піраміді видимості) вокселів. Таким чином, надійний алгоритм генерації списків допомагав тестувати мою версію.


У результаті алгоритм був успішно реалізований, відтестували, пройшов ревізію вихідного коду у програмістів основного філіалу компанії і був вбудований в програмний продукт. Але глибокий сенс всієї цієї роботи я усвідомив тільки через кілька років.


Висновки:


Після закінчення інституту ці висновки лягли в основу нових лабораторних занять з предмету “Технологія програмування” для студентів четвертого курсу. Основні завдання в цьому курсі зводилися до наступного:



Фактично цей лабораторний курс був спробою зімітувати роботу у великій компанії або роботу “на замовлення” для великого проекту в рамках звичайних студентських лабораторних робіт – аналогічно тому, як велася робота для компанії “Integra”. Були отримані наступні результати:



Крім безпосереднього теоретичного і практичного курсу за технологією програмування, деякі елементи методології також включаються в програми інших навчальних курсів, починаючи з самого першого семестру. Ось основні розділи, базова інформація з яких повинна бути представлена ​​у навчальних програмах:


1. Стиль програмування, коментарі, самодокументіруемий код. Лекції рекомендується проводити на першому курсі разом з лекціями, присвяченими кожному з мов програмування. Дві лекції з цієї теми, проведені на першому курсі в якості експерименту (за умови постійного контролю на практичних заняттях), призвели до того, що у всіх студентів протягом декількох тижнів сформувався грамотний і красивий “почерк” при написанні програм для лабораторних робіт.


2. Методики програмування, на прикладах самих різних моделей життєвого циклу – від каскадної моделі до екстремального програмування. Теоретичний матеріал для студентів 3-5 курсу. Питання його підтримки в лабораторному практикумі на цей момент ще не розглядалися.


3. Принципи створення невеликих компонент в рамках великого продукту. Може супроводжуватися лабораторними роботами по розробці COM-об’єктів та іншими аналогічними завданнями.


4. Архітектура програмного забезпечення. Функціональна і структурна декомпозиція, принципи приховування інформації і т.п. Базові знання про правильну побудову структури програми повинні даватися вже на першому курсі при вивченні мов програмування. Більш глибоко питання можна опрацьовувати разом з “Принципами створення невеликих компонент”.


5. Методологія помилок. Класифікація, симптоми, методи пошуку і запобігання. Частина цієї інформації повинна проходити червоною ниткою через численні існуючі курси (починаючи з самого першого семестру). Як окремий предмет (або як набір систематизирующих і узагальнюючих лекцій) може включатися в програму 3 або 4 курсу.


6. Робота з системами контролю версій. Матеріал для студентів 3-4 курсів. Повинен включати в себе розгляд найбільш поширених систем (наприклад, VSS, CVS, SVN), інформацію про порядок роботи з гілками (Branches), мітками (labels), списками змін (changeset) і т.п. Невирішене питання – як організувати лабораторний практикум по цій темі?


7. Початкові відомості про управління програмними проектами. Імовірно, матеріал для студентів п’ятого чи шостого курсів, що навчаються за магістерською програмою. Можна розглядати цей матеріал як логічне продовження курсу, присвяченого методикам програмування (пункт 2).


Як я вже сказав, одним з ключових питань по багатьом позначеним напрямам залишається питання лабораторного практикуму для цього курсу. В даний час розглядаються різні нові варіанти, наприклад, проведення лабораторних робіт, при якому кожен із студентів після розробки програми віддає її на code review своїм товаришам, і вони намагаються проаналізувати цей код на наявність помилок, на читабельність і стилістику. Фінальний code review здійснюється викладачем і порівнюється зі всіма іншими. Такий підхід можна застосовувати як на лабораторних роботах за методологією програмування, так і в роботах з інших предметів. Однак цей підхід суттєво збільшує навантаження, яке лягає на викладача.


На жаль, має місце і тенденція до автоматизації процесу навчання (студент написав лабораторну роботу – запустив – отримав відповідь – записав його в поле введення в автоматичній екзаменаційної програмі – Отримав залік). Така автоматизація виключає етап методологічного осмислення програми і жодним чином не формує у студентів правильну стилістику і структуру коду.


І останнє. Я ні в якому разі не хочу, щоб у вас склалася думка, що питань технології програмування не приділяється уваги. Це не так. У багатьох ВУЗах поставлені хороші лекційні курси. Але, судячи по якостях молодих фахівців, вони не підтримані лабораторними або практичними заняттями, дають навички колективної роботи над великими проектами. На це слід звернути особливу увагу.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*