𝚂𝚗𝚘𝚠𝙱𝚊𝚕𝚕𝙲𝚘𝚍𝚎
240 subscribers
112 photos
3 videos
25 links
Простым языком про it, ai и жизнь инди разработчика @Veoeo. Группа: @CodeBallSnow
Download Telegram
🐬🐬

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

Например вот так выглядит первая часть третьего домашнего задания состоящего из пяти пунктов:

/*
Задание 1

1.1 Представьте, что вы владелец розничного магазина и вам необходимо закупить товар, стоимость которого варьируется от его количества. Если количество закупаемого товара меньше 10 позиций, то цена равна 1000 рублей за штуку. От 10 до 20 единиц товара будет стоить вам 800 рублей за штуку. И вы заплатите 600 рублей за единцу при единовременно покупке от 20 единиц. Создайте условие для расчета цены за еденицу товара в зависмости от его количества и подсичитайте общую сумму используя конструкцию if-else. Постарайтесь написать короткое и читаемое решение
*/
var goodsForPurchase = 28
let firstPrice = 1000
let secondPrice = 800
let thirdPrice = 600

if goodsForPurchase >= 1 && goodsForPurchase <= 9 {
print("Единица товара будет стоить \(firstPrice) рублей за штуку и общая сумма будет равна \(firstPrice * goodsForPurchase)")
} else if goodsForPurchase >= 10 && goodsForPurchase <= 20 {
print("Единица товара будет стоить \(secondPrice) рублей за штуку и общая сумма будет равна \(secondPrice * goodsForPurchase)")
} else if goodsForPurchase > 20 {
print("Единица товара будет стоить \(thirdPrice) рублей за штуку и общая сумма будет равна \(thirdPrice * goodsForPurchase) ")
}

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

Видимо я не буду писать прям всё что узнаю из обучения, но некоторые тезисы с примерами покажу. Мне нравится что в Swift меньше всего скобок и закрывающих символов типа ";". В целом моё окр из детства находит свою реализацию в программировании. Всё что можно автоматизировать - автоматизирую, всё что должно быть вертикальным - вертикально
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3💩3
🐬🐬

Изучил типы коллекций, действия с массивами и словарями. Циклы for-in, while и repeat-while. Выполнил ещё несколько домашних заданий, вот одно из них:

/*
Задание 1

1.1 Пользователь открывает вклад (deposit) в банке на 5 лет на сумму 500 тыс. рублей. Процентная ставка годовых (rate) составляет 11%. Необходимо просчитать сумму дохода (profit) по окончании срока действия (period) вклада. Для решения данной задачи используйет цикл for-in. Примечание: сумма вклада увеличивается с каждым годом и процент нужно считать уже от увелеченной суммы.

1.2 Выведите результат на консоль в таком виде: "Сумма вклада через <... > лет увеличится на <...> и составит <...>"
*/

// ниже решение от меня
var deposit = 500000 // первоначальный объем вклада
var rate = deposit / 100 * 11 // ожидаемый доход в 11% годовых
var period = 5 // продолжительность вклада пять лет
var profit = 0 // первоначальный профит равен нулю потому что ещё не прошел первый год

for index in 1...5 { //
profit += index + rate //
}
var summary = deposit + profit
print("Сумма вклада через \(period) лет увеличится на \(profit) и составит \(summary)")


🐬 этот код я ещё не проверял, ведь элегантное решение от куратора даётся в начале следующей лекции

//  Задание 2
//2.1 Создайте целочисленные переменные base и power с любым значениями на ваше усмотрение.
//2.2 При помощи цикла for in возведите переменную base в степень power и присвойте результат переменной гesult
//2.3 Выведите результат на консоль в следующем виде: «<...> в <...> степени равно <...>»

var base = 2
var power = 4
var result = 1
for _ in 1...4 {
result *= base
}
print("\(base) в \(power) степени равно \(result)")


🐬 чтобы так кратко написать у меня ушло два дня и несколько подходов. Позже посмотрю как задачка решается куратором. Сейчас важно научиться делать домашние задания при помощи любых костылей, а элегантность и clean code это experienced developer's privilege

Чувствую что каждый раз мне требуется время на то, чтобы загрузить полученные знания в разум и заставить их шевелиться для принятия решений по преобразованию человеческих формулировок из заданий в структуру кода. Этот процесс красив по своей сути, но мне бывает тяжело его начать. Думаю что со временем я обрету этот скил
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤2💩2
Channel name was changed to «Я обязательно стану ios разработчиком»
🐬🐬

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

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

Это и понятно, по мере изучения языка я получаю все больше и больше инструментов, затем начинаю понимать как располагаются новые объекты в пробелах между двумя ранее изученными шестерёнками. В итоге это наводит на мысль что только когда я полностью изучу Swift, ООП, UIkit, паттерны проектирования, менеджеры зависимостей, git, docker, solid, agile и SwiftUI вот тогда пазл сложится, вот тогда станет "всё понятно" 😲
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1💩1🍌1
🐬🐬

Я не жалуюсь, но рефлексирую. На этапе функций и closure мне стало сложно. Я решил сделать паузу в пару дней с просмотром альтернативных лекций из этого же источника. Информация там подаётся примерно по такому же roadmap и отличается версией языка на -1.

Начал изучать вопрос о прохождении структурированного материала с практикой на реальных проектах и мощной менторской поддержкой от Яндекс практимума. Это стоит 15.500/мес * 10 мес. Смотрю отзывы, вебинары создателей и собираю информацию. По умолчанию двигаюсь по ранее сформированному пути

Обновил macOs до 13.6.9, а Xcode до 15.2, нашёл несколько дополнительных приложений расширяющих функционал среды разработки. В appstore есть плагин "GPT code creator for Xcode", и судя по превью в нём можно прямо из закомментированного участка в среде, вызвать этот плагин и он сверстает нужный код по промту
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3💩1
🐬🐬

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

Если решение не приходит два дня, то смотрю начало следующей лекции где куратор говорит что почти ни у кого не получилось и показывает "как надо "
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2💩1
🐬🐬

Я неделю решал задания из пятой лекции и всё-таки решил. Вот один из примеров и ход моих мыслей от «решить хоть как-то с нарушением условий» до «ладно, решу так»
😍
Задание: cоздайте функцию, которая генерирует возрастающий массив чисел в интервале от X до Y. Интервал должен определять пользователь при вызове функции

Первое решение без функции и со строго заданными параметрами:
var massiveToGo = [Int]()
var index = 0
for index in 1...3 {
massiveToGo.append(index)
print(massiveToGo)
}


Второе решение, где надо было доработать функцию с выводом вариативных параметров без использования внутреннего диапазона 1...3:
func makeGreatArray(numberOne: Int, numberTwo: Int) {
var massiveToGo = [Int]()
var index = 0
for index in 1...3 {
massiveToGo.append(index)
print(massiveToGo)
}
makeGreatArray(numberOne: 1, numberTwo: 3)


Третий вариант где функция создаёт массив, но с каждой итерацией в консоли появляется новый массив и их количество равно переменной которая должна задавать верхнюю границу диапазона, а по заданию (наверно) должен создаваться один массив:
func makeGreatArray(numberOne: Int, numberTwo: Int) {
var massiveToGo = [Int]()
var index = 0
while index < numberTwo {
index += numberOne
massiveToGo.append(index)
print(massiveToGo)
}
}
makeGreatArray(numberOne: 1, numberTwo: 3)


Ошибка которую я не заметил: тут решение зависит от введённой единицы в переменной numberOne = 1, если диапазон начать с другого числа: то массив создаётся с шагом в это число:
func makeTwentyArray(numberOne: Int, numberTwo: Int) {
var massiveToGo = [Int]()
var index = 0
while index < numberTwo {
index += numberOne
massiveToGo.append(index)
}
if index == numberTwo {
print(massiveToGo)
}
}
makeTwentyArray(numberOne: 1, numberTwo: 20) // вот тут ошибка


Четвёртый вариант: верное решение выводит массив с шагом в 1 из диапазона заданного пользователем, но массив начинается с числа которое больше заданного на единицу:
func makeGreatArray(numberOne: Int, numberTwo: Int) {
var massiveToGo = [Int]()
var index = numberOne
while index < numberTwo {
if index >= numberOne {
index += 1
massiveToGo.append(index)
}
}
if index == numberTwo {
print(massiveToGo)
} else {
print("Чтото пошло не так")
}
}
makeGreatArray(numberOne: 4, numberTwo: 27)


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

Верное решение от преподавателя выглядит так:
func createArray(from start: Int, to end: Int) -> [Int] {
var array = [Int]()
for count in start...end {
array.append(count)
}
return array
}
createArray(from: 2, to: 9)


Как выяснилось: всё решаемо, стоит только приложить к интеллектуальному труду должный объём времени и почти всё получается
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1💩1
🐬🐬

Посмотрел и законспектировал в playground лекцию "ООП в Swift". Сказать что она сложная значит быть искренним на 20%. Я понял за три дня что такое классы, инкапсуляция, наследование, полиморфизм и где это применимо. Лишь благодаря постоянным пересмотрам небольших участков видео по два три раза вся информация уложилась как надо

Повторяю код из видео и комментирую то что говорит преподаватель. Я понимаю о чём он рассказывает, даже несмотря на сбивчивое объяснение с постоянными возвратами на предыдущие тезисы из-за тупых и излишних вопросов в чате (это запись вебинара). Еще преподаватель просто копипастит ранее написанный в лекции код который иллюстрировал предыдущую тему и использует его уже для объяснения другой. Просто оставляет все имена свойств, классов и методов как они были в предыдущей теме. А то что было написано ранее просто оборачивает в комментарий
/* some Swift code */ 

и компилятор не ругается, а я матерюсь вслух..

Приходится всё переименовывать и структурировать урок самостоятельно
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🐳1
🐬🐬

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

Надо было просто оставить свойства и методы класса пустыми не вписывая формулы расчёта фигур в родительском классе, а оставить их в наследуемых объектах

Сейчас споткнулся на этапе создания интерфейса, который должен выводить результаты расчёта через print. Консоль Xcode пишет не цифры, а (function). Пойду погуляю на stack overflow, уверен на эту проблему уже есть решение

Ниже пример который я решил легко. Здесь наработан опыт создания класса, его свойств и методов:
import Cocoa

class Orange {
let color: String
let taste: String
let radiusOrange: Double
var orangeVolume: Double
init() {
color = "Orange"
taste = "sweet"
radiusOrange = 95
orangeVolume = 0
}
func calculateOrangeVolume () {
orangeVolume = 4/3 * Double.pi * pow(radiusOrange,3)
}
}

let someOrange = Orange()
print("Orange has \(someOrange.color) color and \(someOrange.taste) taste")
let orangeVolume = 4/3 * Double.pi * pow(someOrange.radiusOrange,3)
let calculate = Orange()
calculate.calculateOrangeVolume()


Со вторым и третьим заданием я пока разбираюсь. Хочу пройти этот путь самостоятельно, через понимание процесса. В любом случае всегда смогу подсмотреть верное решение в начале следующей лекции, но по возможности делать этого не буду
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍4💩1
🐬🐬

Я подсмотрел решение задачи о которую споткнулся. Буду так делать и далее если на этапе обучения начнутся трудности решить которые становится неоправданно сложно. Преподаватель показал изящный код (второй скриншот) по сравнению с которым, моё решение (первый скриншот) выглядит громоздко и не выводит результат работы метода класса на консоль, пишет (function)

Здесь показывать не буду потому что код не помещается в публикацию. Кому интересно посмотрят скриншоты. Задача была рассчитать параметры геометрических фигур используя переопределяемые методы (тк формулы для разных фигур разные) через наследование классов от общего "Figure" до узкоспециализированных типа "Ellipse". Суть я понял, но на практике применил свои знания частично

Я не сдаюсь, а обучаюсь паттернами поведения. Увеличиваю насмотренность вариантов работы с кодом. Именно так действуют успешные разработчики. Они не проламывают стену незнания своей головой, но ищут опыт и находят его таким же способом как я действую сейчас
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
12❤3💩1
12/40

Лето прощай. Первого августа 2024 я начал менять свою жизнь изучением Swift. Моя цель: обязательно стать ios разработчиком

Сегодня проходим перечисления и структуры:

enum Weekday {
case monday // первый вариант написания перечисления
case tuesday // все перечисленные свойстыв имеют тип "Weekday"
case wednesday
case thuesday
case friday
case suterday
case sunday
}


и способы их использования в методах:

func setupAlarmTwo() {
switch weekday { // компиляторр теперь значет что "case" будем сравнивать с "weekday"
case .monday:
print("Установить будильник на 8 утра")
case .tuesday:
print("Установить будильник на 8:30 утра")
case .wednesday:
print("Установить будильник на 8:30 утра")
case .thuesday:
print("Установить будильник на 7:30 утра")
case .friday:
print("Ура пятница")
case .suterday:
print("Будильник не установлен")
case .sunday:
print("Будильник не установлен")
}
}


С каждым разом я всё больше и больше понимаю где применяются фрагменты раннее полученных знаний. Например switch был создан под enum. Без этих операторов ветвление в Swift (через if-else) выглядело бы очень громоздким
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤2💩1
13/40

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

Считаю это нормальным, когда чувствую что вот именно сейчас пора списывать, тоесть насматривать себе бэкграунд кода 😫

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

ps: 23 октября 2024 я купил свой первый 16" Macbook pro на процессоре M1pro с 16Gb оперативной и 512Gb ssd памяти
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1💩1
14/40

У меня возникает ощущение что я вот вот сдамся. Почти закончил первый из трёх курсов от swiftbook 2019 года. Информация там устаревшая и преподаватель очень часто сбивается с мысли при объяснении материала, а также в разборе домашних заданий своих студентов

Мне очень не хватает коммюнити учеников, качественного кодревью и вообще фитбека от действующих ios разработчиков. Ощущение что я тут один декомпозирую каменную кладку стены что стоит между моим настоящим и тем человеком, которым я хочу стать. Чтобы перебраться на сторону интересного занятия которое приносит пользу людям, предстоит перетащить не один десяток тяжёлых блоков задач и проблем

Сейчас склоняюсь к мысли что всё таки приобрету курс от Яндекс практикума на десять месяцев тк отказываться от своей цели не планирую. Хотя моушен дизайн мне тоже очень интересен, но у меня есть только одна жизнь и бюджет только на одно решение. Видимо ближе к новому году его надо принять
😍
😍
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
13🫡3❤1💩1🙏1