Хто ти по професії: Різниця між «Programmer», «Software Engineer» і «Computer Scientist»

Як тільки сьогодні називають програмістів, особливо в зарубіжних ЗМІ. Так і у нас, зокрема, при пошуку роботи, можна зустріти абсолютно різні описи посадових обов'язків.

Змінюється від цього суть роботи? Ми у 1cloud спробували розібратися в тому, яку роботу увазі такі спеціалізації, як «Programmer», «Software Engineer» і «Computer Scientist».


/ фото hackNY.org CC

Термінологія
Вивчення суті питання логічно почати з розуміння термінів. Самим зрозумілим є «Programmer», який в Оксфордському словнику определяется як людина, відповідальний за написання програми. І з перекладом все просто: програміст – він і в Африці програміст. І навіть в Росії. Складнощі починаються далі.

«Software Engineer» (SE) (відповідно статті webopedia) — це дипломований професійний інженер, що має достатньо знань і навичок для застосування інженерних дисциплін при створенні програмного забезпечення. Головна відмінність — SE займається розробкою, керівництвом проектів, а програміст їх реалізує шляхом написання коду. На російську назву посади перекладається як «інженер-програміст» або просто «програміст».

Тепер розберемося з тим, хто такий «Computer Scientist» (CS). Якщо вірити словник, то мова йде про роботу в області теорії обчислень і проектування комп'ютерів. Різні словники дають різний переклад на російську: «вчений, що працює в галузі теорії обчислювальних машин і систем (в області ВТ, в області комп'ютерних наук)» або «програміст».

Отже, маємо три дуже різних визначень англійською і три «програміста» в російській.

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

Для забезпечення повноцінної розробки З/коду програміст повинен бути сконцентрований на своїй роботі і забезпечити подальше використання та інтеграції програмних компонентів один з одним. Ентоні Щерба (Anthony Scherba), президент і засновник студії розробки Yeti, сравнивает цей процес з рішенням складної алгебраїчної задачі.

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

Необов'язкові компетенції: математичний аналіз, комунікативні навички та вміння працювати в команді — детальніше блоге Алана Скоркіна (Alan Skorkin).

Робота «Software Engineer» передбачає комплексний підхід і іноді її можна порівняти навіть з процесом створення твору мистецтва, яке програміст прагне постійно вдосконалювати. Так считает і Деніел Каплан (Daniel Kaplan), досвідчений програміст і співробітник Pivotal Labs.

Інженер повинен бачити всю картину з двох сторін: проект у відповідності з загальним планом та окремі завдання, необхідні для його здійснення. Він повинен вміти знаходити вірні комплексні рішення, розуміти вимоги клієнтів, прогнозувати можливі наслідки та розподіляти завдання з програмування (в команді).

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

«Computer Scientist» — математик і технічний фахівець в рівній мірі. Він обладает математичними знаннями і пояснює, як і чому працює той чи інший інструмент, рішення або алгоритм. Його робота має велике значення для розвитку програмування в цілому. Також CS властива спеціалізація на одній чи декількох сферах — ШІ, нейронні мережі, теорія мов програмування, бази даних.

Подання професіоналів в принципі співвідносяться зі словниковими статтями, що природно: на те вони й професіонали, щоб розбиратися у своїй роботі. Збій в комунікації і підміна понять явно відбувається на якомусь іншому рівні, але на якому?

Яку різницю бачать навчальні заклади і роботодавці
Почнемо знову з «програміста». Ще одне його важлива відмінність від всіх інших: як правило, відучившись в профільному Вузі, вчорашній студент стає не просто «програмістом», а «інженером/бакалавром/магістром по спеціальності/напряму...».

Для західної освітньої системи це теж характерно — взглянитеприміром, на різноманітність спеціальностей напрямку «Software Development and Programming» Сіднейського Технологічного Університету. Жодна з них не містить у своїй назві слова «programmer» або «programming».

Ні, звичайно, багато університетів пропонують курси з програмування (навіть безкоштовні), але рідко коли в дипломі написано просто «програміст». А що роботодавці хочуть бачити?

Крім знання різних мов і/або досвіду роботи на різних мобільних платформах/ досвіду веб-програмування/ адміністрування, програмісту не можна обійтися без комунікативних навичок (приклади тут і тут). У наведених прикладах вакансій потрібно навички роботи в команді, передбачається спілкування з вендорами, співпраця з іншими відділами компанії і технічним директором. Ну і організаторські та управлінські здібності будуть незайвими. А в ряді випадків потрібні ще і достатньо глибокі знання математики.

Вимоги на російському ринку відрізняються не сильно і включають розробку проектів, роботу в команді, розуміння принципів інформаційної безпеки (і все ті ж навички, зазначені в абзаці вище). Таким чином, роботодавці хочуть бачити у програміста універсального (і творчо мислячого) фахівця, а не просто людину, яка пише і тестує код на певній мові, вирішуючи ким-то поставлене завдання. Виходить, що роботодавець (як на Заході, так і у нас) під «програмістом» дуже часто розуміє те, що словники позначають як мінімум як «Software Engineer».

Освітні програми по профілю «Software Engineering» передбачають, підхід до розробки ПЗ з наукової та інженерної точки зору, розробку власних проектів, аналітичну та управлінську діяльність. Пам'ятаєте, в попередньому розділі експерти говорили, що SE повинен вміти реагувати на мінливі вимоги? На магістерській програмі крім цього пояснюють, як вкладатися в бюджет і терміни.

В університеті Глазго вчать визначати технічні характеристики, проектувати, створювати і верифікувати великі програмні системи. При цьому список предметів включає програмування на різних мовах, проектування баз даних, вивчення алгоритмів, тобто всі ті знання, які необхідні і для роботи «класичного програміста».

Що стосується точки зору роботодавців, то на їх думку в обов'язки інженера-програміста входить написання коду, перевірка технічної реалізації UI/UX, оптимізація роботи додатків, розробка внутрішньої методології та стандартів, контроль та управління вимогами. Крім того, претендент повинен володіти лідерськими якостями. Технічні вимоги не сильно відрізняються від вимог до «звичайним» програмістам: їх приклади можна подивитися тут: 1 2 і 3.

Університетські програми за напрямом «Computer Science» включають математичних предметів, вивчення теорії алгоритмів, а також такі теми як машинне навчання, нейронні мережі і хмарні обчислення. Студенти вивчають більше теорії, але повинні успішно застосовувати на практиці отримані математичні знання, виявляти, формулювати і вирішувати інженерні проблеми. Таким чином, у цього типу фахівців формується найбільша «широта поглядів» — в теорії він може працювати і програмістом, і SE, і безпосередньо за фахом.

Це не означає, що отриманих знань йому «за очі» вистачить для успішного старту кар'єри в будь-якій з областей і більше нічому вчитися не доведеться. Наприклад, щоб побудувати успішну кар'єру розробника, такому випускнику явно знадобиться «підтягнути» практичні навички з написання коду — але не доведеться вивчати програмування «з нуля».

Ідеальний претендент на посаду «Computer Scientist» повинен володіти знаннями з теоретичної інформатики, теорії алгоритмів, проектування баз даних, комп'ютерного моделювання, при необхідності виконувати завдання аналітика і проводити дослідження, знати весь процес від проектування до впровадження… Список можна продовжувати довго (докладніше читайте тут, тут).

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

Що в підсумку
Так, дійсно програмісти, SE і CS — спеціальності близькі, але не однакові, і готують таких професіоналів на різних університетських спеціальностях. Найбільшу плутанину в трактуванні термінів вносять роботодавці – для них, наприклад, різниця між «програмістом» Software Engineer може бути зовсім не очевидна.

Судячи з вимог роботодавців, від «просто програміста» чекають творчого підходу, універсальних знань і soft skills, а «computer scientist» може вирішувати важливі, але при цьому суто прикладні, вузьконаправлені завдання — говорити про те, що одна спеціальність «за замовчуванням» краще або «сильніше» іншого тут не доводиться.

Про що ще ми пишемо в блозі 1cloud на Хабре:

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.