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

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

Моя ноэтическая основа:

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

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

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

Объяснение моей точки зрения:

Одним из важнейших произведений философии 20-го века является «Логико-философский трактат», написанный Людвигом Витгенштейном. «Трактат» — это книга, в которой исследуются отношения между языком и миром, а также пределы языка. Я хочу изучить некоторые части «Трактата» и посмотреть, как они могут пролить свет на мой взгляд на программирование. Давайте взглянем на первую предпосылку и некоторые из ее подпосылок:

1) Мир есть все, что есть.

1.1) Мир есть совокупность фактов, а не вещей.

1.11) Мир определяется фактами и тем, что все являются фактами.

1.12) Ибо совокупность фактов определяет как то, что имеет место, так и все то, что не имеет место.

1.13) Факты в логическом пространстве — это мир.

Смысл Витгенштейна в этой первой посылке состоит в том, что мир состоит из фактов, а не просто из вещей.

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

Что такое «факт» в программировании?

На мой взгляд, «факт» в программировании — это то, как части данных соотносятся друг с другом — как данные логически обрабатываются в программе. В приведенном ниже примере 2 одним из фактов о программе является то, что для каждого индекса myArray программа записывает в консоль некоторое предложение x, которое включает значение индекса i.

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

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

Возьмем, к примеру, две программы, перечисленные ниже:

Пример 1

let myArray = [1, 2, 3, 4 ,5]

if(myArray.length > 3) {
console.log(“Plenty of inventory”)
} else {
console.log(“Restock soon!”)
}
// expected output: “Plenty of inventory”

Пример 2

let myArray = [1, 2, 3, 4 ,5]

for(let i = 0; i < myArray.length; i ++) {
let money = myArray[i] > 1 ? “dollars” : “dollar”
console.log(`I have ${myArray[i]} ${money}`)
}
// expected output:
“I have 1 dollar”
“I have 2 dollars”
“I have 3 dollars”
“I have 4 dollars”
“I have 5 dollars”

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

Как мы решаем, какие факты должны содержаться в нашей программе?

Первый шаг в написании хорошей программы — воображение! Что такое воображение? Допустим, наше воображение — это сумма всех наших намерений. Например, можно представить себе приложение для отслеживания запасов. Это может быть разбито на разные намерения, например. показать, сколько x есть в наличии, разместить заказ на большее количество y, если у меня есть меньше 3 на складе, и т. д. Затем эти намерения можно разбить на факты о том, как эти намерения будут реализованы с использованием доступных данных.

Например: если у меня есть некоторая переменная, которая содержит количество z, которое у меня есть на складе (данные), и я хочу вывести в консоль текущую сумму, если она упадет ниже 4 (намерение), то мне нужно ввести в мою программу некоторый факт. который реализует мое намерение на основе моих данных:

let zStock = 3

if (zStock < 4) {
console.log(zStock)
}
// expected output: 3

В заключение:

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

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