Отново курсът на devslopes. Повече от година след като започнах курса, успях да започна последната задача от седмица 4. Моят опит е, че в момента съм малко затрупан от всички неща, които се случват, за които трябва да се погрижа. Постоянно съм на ръба на прегарянето.

Работя на пълен работен ден като свободна практика и проектът е доста предизвикателен, тъй като изисква някои задълбочени технически умения, които не можете да научите с нищо друго освен с изобретяване.

След това е нашата къща. Решихме да го преустроим в края на 2020 г. Най-горният етаж с покрива трябваше да бъде напълно премахнат и заменен с нов покрив, което позволява на последния етаж да бъде напълно използваем като, добре, място за живот. С това дойде идеята да се добавят слънчеви панели, което изискваше известно количество прекабеляване на къщата. Тогава по време на една неприятна буря коминът ни се счупи и поради климатичните промени решихме, че не искаме повече да се отопляваме с изкопаеми горива. Затова монтирахме термопомпа за водата и инфрачервени нагреватели за отопление.

И реших да взема най-големия си син в моята компания, за да може да започне да се учи да кодира. Завършва средното си училище (в Германия се нарича Realschule). Тъй като имаше известен афинитет към всичко компютърно, това изглеждаше като добра идея. Но все още има огромна разлика между афинитета към компютрите и желанието да се научите как да кодирате. Ще видим как ще се развие това.

И между всичко това и някои здравословни проблеми и витаещата пандемия някак си загубих енергията да следвам курса с пълна пара.

През юли реших да започна последната задача от слабата четворка, която е да програмирам приложение за калкулатор за iOS. И наистина исках да го направя. В душата си все още съм хардкор програмист, въпреки факта, че професията ми програмиране започна преди около 35 години, когато бях на около 15. Наистина обичам кодирането. Така че правенето на вътрешните характеристики на калкулатор изглеждаше хубава идея и добре дошла промяна.

Предстоящата задача беше доста ясна. Вземете обичайното приложение за калкулатор. Направете бутони за 10-те цифри, някои основни оператори и бутон за извършване на изчисление. И след това отпечатайте резултата.

И докато си мислех за това малко приложение, в съзнанието ми започнаха да изплуват идеи как да подобря този калкулатор. Както обикновено започнах да копая собствената си заешка дупка. Всъщност не знам в какъв ред са се появили тези допълнителни идеи, но като се появиха, се появиха.

Може да е хубаво да можете да напишете пълни условия, преди да оставите калкулатора да ги изчисли. Така че не само „1+2“, но и „1+2–3*4“.

Това изисква калкулаторна машина, която може да приема входен низ, който съдържа термина, и да връща резултата от термина. Изглежда доста просто. Виж, все още не съм толкова дълбоко в заешката дупка.

Освен това може да е хубаво да можете да добавяте подтерми чрез скоби. Като „1+(2–3) * 4“. Всъщност не добавя толкова много сложност към приложението. Само мъничко. Може би някаква рекурсивна магия. И по дяволите, все още виждам входа на заешката дупка, където влязох. Но винаги ли е бил толкова малък?

И тогава може да е хубаво да има вложена скоба. Като „1 + 2 — (3*(4–5))“. Тъй като в този момент изчислителната машина вече трябва да е доста напреднала, това със сигурност няма да представлява голям проблем.

И възможност за изчисляване само на следващата стъпка от изчислението. Така че се изпълнява само текущият най-вътрешен срок, а не пълният срок. Това означава, че „1 + 2 — (3*(4–5))“ води до „1 + 2 — (3*-1)“

Хм, тази дупка е уютна. Наистина ли е имало вход? Както и да е, връщането назад никога не е опция, поне не и за някой толкова твърдоглав като мен. Ритането в стени с глава винаги е било моята специалност. Затова по-важният въпрос е: Ще има ли някога изход или тази заешка дупка ще ме погълне.

Правенето на калкулатора за всичко това се оказа доста предизвикателно:

  • Трябва да се има предвид разпространението на оператора
  • „-“ минус ли е или започва с отрицателно число?
  • Как преминавате напред и назад през низ в swift с всички тези малко странни изрази за обхват?

Страхотна помощ за нещо като това са модулните тестове. Тестване на всички възможни комбинации от изчисления, които могат да възникнат. И тогава, когато мислите, че сте ги тествали всичките и сте се сетили за всяко странно изчисление, вие си играете с калкулатора само за да разберете, че сте забравили този наистина уместен тип изчисление. И за да го оправите, трябва да пренапишете двигателя на дупката.

Това всъщност е част от връзката любов-омраза между мен и кодирането. И тази връзка любов-омраза е може би единственото нещо, което наистина обичам в кодирането. Заставане пред проблем, който изглежда неразрешим, и след това разрешаването му. Преодоляване отново и отново на желанието да _не_ реши проблем. Да го оставя на хората след мен. Веднъж поеми по големия широк път, по който всички вървят. И тогава реших, че този широк път не е за мен. Да осъзная, че не съм човекът, който поема по този широк път, по лесния път. Не. Да тръгнеш по пътя, където е каменист, неравен и безлюден. Сам. Не използвайки някаква фантастична библиотека, а измисляйки нови идеи в движение. Това е предизвикателство, отнема време, понякога е болезнено и изтощително и изисква определено количество енергия. Но тогава заешката дупка свършва. Едва забележимият малък път преминава в поляна, заобиколена от хубава гора, а по средата наистина хубаво езерце. Топло. Релаксиращо. Готово. Приложението работи. Прави каквото искам.

И да стигна до тези места, изпълнени с красота, спокойствие и мир, наистина е единствената награда, към която се стремя. И няма място като код, където мога да намеря тези места.

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

Затова реших да изпратя приложението в състояние, в което то работи и извършва всички очаквани изчисления с вложени подчленове, стъпкова функционалност, история на изчисленията.

Но може да се излъска още повече. Двойното докосване на историята може да върне елемента обратно в реда за изчисление. Редактирането на изчисление не само в края, но и по средата би било хубаво. И още някои корекции на потребителския интерфейс. Грижа за преливане на линии.

Излязох от заешката дупка. И беше много хубаво изживяване. Но какво научих?

  • Все още съм много зле в даването на оценки. Това вероятно никога няма да проработи.
  • Придържането към първоначалния план може да е достойна идея. Въпреки че е добре да подобрявате програма в движение, трябва да се науча да се придържам по-внимателно към истинската задача. Калкулатор, в който можете да въведете някои цифри, последвани от оператор, последван от някои други цифри, последвани от „=“, за да получите резултата, е нещо различно от калкулатор, който може да обработва вложени подтермини, предоставя история и други неща.
  • Когато инвестирам себе си в код, той наистина може да стане добър. Дори когато прекалявам и се опитвам да направя много повече от очакваното.
  • Намирането на край е полезно и понякога най-трудната част.
  • Това, което е важно за мен, е добре да бъде важно за мен. Така че ще се придържам повече към тези важни за мен неща.