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

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

Дело в том, что мне действительно не хватало технических навыков: довольно ограниченные знания JavaScript и никакого представления об AWS и облачных сервисах Google.

Однако занятия философией помогли мне улучшить профессиональное мастерство  —  неотъемлемое качество любого хорошего программиста. Я по-прежнему с удовольствием занимаюсь философией, поскольку она помогает развиваться в сфере разработки ПО. Далее я докажу данный тезис посредством 3-х убедительных аргументов.

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

1. Философия формирует навык продуктивного разногласия

Философы расходятся во взглядах. Как говорил философ Питер ван Инваген: “Разногласия в философии повсеместны и неразрешимы”.

Едва ли в философии найдется тезис, по которому философы смогут достичь единодушия. Согласно исследованию PhilPapers от 2020 года, проведенному среди профессиональных философов, только в 3-х из 40 главных философских вопросов более 70% мыслителей пришли к единому мнению.

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

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

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

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

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

2. Философия учит разбивать сложную проблему на части

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

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

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

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

3. Философия учит выявлять ошибки

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

Для проверки состоятельности аргумента философы должны убедиться, следует ли вывод из его посылок и все ли исходные утверждения истинны. Один из способов это проверить  —  найти контрпример. Если такой существует, то аргумент признается недействительным.

В общем и целом, вы стараетесь предугадать контраргументы и парировать их. Именно таким умением также необходимо владеть и программистам.

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

Философия и программирование

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

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

Читайте также:

Читайте нас в Telegram, VK и Дзен

Перевод статьи Matilde Aliffi: 3 Reasons Why Philosophy Can Make You a Better Programmer

Сообщение Философия как инструмент совершенствования программистов появились сначала на NOP::Nuances of programming.

Похожие записи

AEGIS Algorithms Android Angular Apache Airflow Apache Druid Apache Flink Apache Spark API API Canvas AppSec Architecture Artificial Intelligence Astro Authentication Authorization AutoGPT AWS AWS Aurora AWS Boto3 AWS EC2 AWS Lambda Azure Babylon.js Backend bash Beautiful Soup Bento UI Big Data Binary Tree Browser API Bun Career Cassandra Charts ChatGPT Chrome Extension Clean Code CLI ClickHouse Coding Codux Combine Compose Computer Context Fusion Copilot Cosmo Route CProgramming cron Cryptography CSS CTF Cypress DALL-E Data Analysis Data science Database dbt dbt Cloud deno Design Design Patterns Detekt Development Distributed Systems Django Docker Docker Hub Drizzle DRY DuckDB Express FastAPI Flask Flutter For Beginners Front End Development Game Development GCN GCP Geospatial Git GitHub Actions GitHub Pages Gitlab GMS GoFr Golang Google Google Sheets Google Wire GPT-3 GPT3 Gradio Gradle Grafana Graphic Design GraphQL gRPC Guidance HMS Hotwire HTML Huawei HuggingFace IndexedDB InfoSec Interview iOS Jackknife Java JavaScript Jetpack Compose JSON Kafka Kotlin Kubernetes LangChain Laravel Linux LlaMA LLM localStorage Logging Machine Learning Magento Math Mermaid Micro Frontends Mobile Mobile App Development mondayDB MongoDB Mongoose MySQL Naming NestJS NET NetMock Networks NextJS NLP Node.js Nodejs NoSQL NPM OOP OpenAI OTP Pandas PDF PHP Playwright Plotly Polars PostgreSQL Prefect Productivity Programming Prometheus Puppeteer Pushover Python Pytorch Quarkus Rabbitmq RAG Ramda Raspberry Pi React React Native Reactor Redis REST API Revolut Riverpod RProgramming Ruby Ruby on Rails Rust Scalene SCDB ScyllaDB Selenium Servers Sklearn SLO SnowFlake Snowkase Software Architecture Software Development Solara Solid Spring Boot SQL SQLite Streamlit SudoLang Supabase Swift SwiftUI Tailwind CSS Taipy Terraform Testing Transformers TURN TypeScript Ubuntu UI Design Unix UX UX Design Vim Vite VSCode Vue Web Architecture Web Components Web Development Web Frameworks Web Scraping Web-разработка Webassembly Websocket Whisper Widgets WordPress YAML YouTube Zed Наука о данных Разное Тренды

Современный подход к разработке с использованием Next.js

Вы пропустили

AEGIS Algorithms Android Angular Apache Airflow Apache Druid Apache Flink Apache Spark API API Canvas AppSec Architecture Artificial Intelligence Astro Authentication Authorization AutoGPT AWS AWS Aurora AWS Boto3 AWS EC2 AWS Lambda Azure Babylon.js Backend bash Beautiful Soup Bento UI Big Data Binary Tree Browser API Bun Career Cassandra Charts ChatGPT Chrome Extension Clean Code CLI ClickHouse Coding Codux Combine Compose Computer Context Fusion Copilot Cosmo Route CProgramming cron Cryptography CSS CTF Cypress DALL-E Data Analysis Data science Database dbt dbt Cloud deno Design Design Patterns Detekt Development Distributed Systems Django Docker Docker Hub Drizzle DRY DuckDB Express FastAPI Flask Flutter For Beginners Front End Development Game Development GCN GCP Geospatial Git GitHub Actions GitHub Pages Gitlab GMS GoFr Golang Google Google Sheets Google Wire GPT-3 GPT3 Gradio Gradle Grafana Graphic Design GraphQL gRPC Guidance HMS Hotwire HTML Huawei HuggingFace IndexedDB InfoSec Interview iOS Jackknife Java JavaScript Jetpack Compose JSON Kafka Kotlin Kubernetes LangChain Laravel Linux LlaMA LLM localStorage Logging Machine Learning Magento Math Mermaid Micro Frontends Mobile Mobile App Development mondayDB MongoDB Mongoose MySQL Naming NestJS NET NetMock Networks NextJS NLP Node.js Nodejs NoSQL NPM OOP OpenAI OTP Pandas PDF PHP Playwright Plotly Polars PostgreSQL Prefect Productivity Programming Prometheus Puppeteer Pushover Python Pytorch Quarkus Rabbitmq RAG Ramda Raspberry Pi React React Native Reactor Redis REST API Revolut Riverpod RProgramming Ruby Ruby on Rails Rust Scalene SCDB ScyllaDB Selenium Servers Sklearn SLO SnowFlake Snowkase Software Architecture Software Development Solara Solid Spring Boot SQL SQLite Streamlit SudoLang Supabase Swift SwiftUI Tailwind CSS Taipy Terraform Testing Transformers TURN TypeScript Ubuntu UI Design Unix UX UX Design Vim Vite VSCode Vue Web Architecture Web Components Web Development Web Frameworks Web Scraping Web-разработка Webassembly Websocket Whisper Widgets WordPress YAML YouTube Zed Наука о данных Разное Тренды

Современный подход к разработке с использованием Next.js