"Комп'ютерний вчений" є дещо широким, оскільки він включає людей, які роблять чисельний аналіз за допомогою паперу / LaTeX та реалізацій концепцій, людей, що пишуть бібліотеки загального призначення, та людей, що розробляють додатки, що вирішують певні класи проблем, та кінцевих користувачів, які використовують ці додатки. Навички, необхідні для цих груп, різні, але є велика перевага - ознайомлення з «повним стеком». Я опишу те, що, на мою думку, є найважливішим елементом цієї групи, люди, які працюють на цьому рівні, звичайно, повинні мати глибші знання.
Знання домену (наприклад, фізика та технічна освіта)
Кожна людина повинна знати основи класу проблем, які вони вирішують. Якщо ви працюєте над PDE, це означатиме деяке загальне ознайомлення з декількома класами PDE (наприклад, Пуассоном, еластичністю, стисливим і стисливим Navier-Stokes), особливо якими властивостями важливо "точно" захопити і що може бути вирішено помилка (це інформує вибір методу щодо локальних збережених та симплектичних інтеграторів). Вам слід знати про деякі функціонали та типи аналізу, що цікавлять програми (оптимізація підйому та перетягування, прогнозування відмови, інверсія параметрів тощо).
Математика
Кожен повинен мати деяке загальне ознайомлення з класами методів, що відповідають їх проблемній галузі. Сюди входять основні характеристики розрідженої та щільної лінійної алгебри, доступність "швидких методів", властивості просторової та часової дискретизації та методи оцінки того, які властивості фізичної проблеми потрібні, щоб техніка дискретизації була придатною. Якщо ви здебільшого є кінцевим користувачем, ці знання можуть бути на дуже високому рівні.
Інженерія програмного забезпечення та бібліотеки
Ознайомлення з техніками абстрагування та дизайном бібліотек корисно майже для всіх в обчислювальній науці. Якщо ви працюєте над методами підтвердження концепції, це поліпшить організацію вашого коду (полегшить комусь інший "перевести" його в надійну реалізацію). Якщо ви працюєте над науковими програмами, це зробить ваше програмне забезпечення більш розширеним і полегшить взаємодію з бібліотеками. Будьте захисними при розробці коду, таким чином, щоб помилки були виявлені якомога раніше, а повідомлення про помилки були максимально інформативними.
Інструменти
Робота з програмним забезпеченням - важлива частина обчислювальної науки. Знання обраної мови, підтримка редактора (наприклад, теги, статичний аналіз) та інструменти налагодження (налагоджувач, вальдрінд) значно підвищує ефективність вашої розробки. Якщо ви працюєте в пакетному середовищі, ви повинні знати, як подавати завдання та отримувати інтерактивні сеанси. Якщо ви працюєте зі складеним кодом, знання компіляторів, лінкерів та інструментів побудови, таких як Make, заощадять багато часу. Контроль версій має важливе значення для всіх, навіть якщо ви працюєте поодинці. Дізнайтеся Git або Mercurial і використовуйте їх для кожного проекту. Якщо ви розробляєте бібліотеки, ви повинні досить повно знати мовні стандарти, щоб ви майже завжди писали переносний код в перший раз, інакше ви будете поховані в запитах на підтримку користувачів, коли ваш код не створюється у їхньому стильному середовищі.
LaTeX
LaTeX - це фактичний стандарт для наукових публікацій та співпраці. Досвід роботи з LaTeX важливий, щоб мати змогу повідомляти свої результати, співпрацювати над пропозиціями тощо. Створення сценаріїв також важливе для відтворюваності та корекції даних.