Get Mystery Box with random crypto!

NurBlog: С нуля до джуна

Telegram арнасының логотипі thenurblog — NurBlog: С нуля до джуна N
Telegram арнасының логотипі thenurblog — NurBlog: С нуля до джуна
Арна мекенжайы: @thenurblog
Санаттар: Блогтар
Тіл: қазақ
Жазылушылар: 25
Арнадан сипаттама

Мой путь в мир IT. Делитесь своими мыслями, ставьте реакции и подписывайтесь на мой канал, я ценю каждый отзыв🙌

Ratings & Reviews

3.67

3 reviews

Reviews can be left only by registered users. All reviews are moderated by admins.

5 stars

1

4 stars

0

3 stars

2

2 stars

0

1 stars

0


Соңғы хабарлар 2

2023-01-28 15:05:14 День #12. Отчет за 27.01.2023

1. Принял

2. Не пользовался ~30 минут

3. Прочитал 11-ю главу книги "Чистый код", глава оказалась сложной, вот некоторые основные выводы из 11-й главы:

1) Конструирование и использование системы — два совершенно разных процесса. Инициализация приложения и бизнес логика должны быть четко изолированы. Приложение ничего не должен знать о main или о процессе конструирования.

2) Архитекторы зданий, должны планировать все заранее и не могут вносить радикальные архитектурные изменения в середине строительства. В отличие от архитектуры зданий, архитектура программных систем может развиваться последовательно, если обеспечивается правильное разделение ответственности. Это самое важное различие между программными системами и физическими.

3) Лучше всего отложить принятие решения до последнего момента. Дело не в лени или безответственности; это просто позволяет вам принять наилучшее решение, располагая как можно большим количеством информации.

4) Не стоит форсировать использование технологий из-за того, что они являются хайповыми или стандартом. Если вы можете обойтись простым и прямолинейным решением, идите этим путем.

5) Независимо от того, проектируете ли вы всю систему или ее отдельные модули: используйте самое простое из возможных решений.

4. Лег спать ~ в 23:45
44 views12:05
Ашу / Түсініктеме
2023-01-27 19:57:19 День #11. Отчет за 26.01.2023

1. Принял душ после того, как проснулся

2. Воспользовался телефоном

3. Сегодня я познакомился с темой аспектно-ориентированного программирования (дальше АОП). АОП позволяет встраивать новый код (обычно служебные задачи, такие как логирование, управление транзакциями и т.д.) в готовые функции или объекты, не затрагивая их целевую логику. Если вы знакомы с триггерами в SQL, они очень похожи, оба предоставляют способ добавления функциональности в существующий код, без изменения исходного кода. Допустим, нам нужно логировать все классы определенного пакета или классов с определенной аннотацией. Мы можем не добавлять повторно новый код в каждый из этих классов, а просто определяем правила для этих методов и соответствующий метод для них. Далее я попытаюсь объяснить основные концепции АОП в одном предложении:

Pointcut - это шаблон для сопоставления методов (набор Join point-ов).
Join point - это определенный метод, которая соответствует шаблону pointcut.
Advice — набор действий выполняемых на Pointcut-ах.
Aspect - это модуль, который содержит все Pointcut-ы и Advice-ы.

Сегодня в Java популярны 2 библиотеки АОП: Spring AOP и AspectJ. Давайте рассмотрим краткий пример использования AspectJ, допустим, мы хотим логировать все действия сеттеров в пакете entities:
@Aspect
public class LoggingAspect {

@Pointcut("execution(* entities..set*(..))")
public void setter() {}

@Before("setter()")
public void logSetter(JoinPoint joinPoint) {
String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
System.out.println("setter called in class: " + className + " for method: " + methodName + " with args: " + Arrays.toString(args));
}
}

Что я прочитал?
1. Что такое АОП? Основы аспектно-ориентированного программирования
2. Аспектно-ориентированное программирование, Spring AOP
3. Spring AOP: What's the difference between JoinPoint and PointCut?

4. Лег спать в ~00:00

UPD: Советы студенту от CTO в UvU, ex Yandex, ex Facebook, ex Twitter, в общем, от крутого программиста. Советую прочитать
45 viewsedited  16:57
Ашу / Түсініктеме
2023-01-26 20:55:28 День #10. Отчет за 25.01.2023

1. Не сегодня

2. Не пользовался электроникой в течение получаса

3. Сегодня я прочитал разницу между фабриками (Простая фабрика, фабричный метод, абстрактная фабрика). Я всегда путался между ними и решил понять разницу между ними раз и навсегда)) В общем смысле фабрика создает объекты, не предоставляя клиенту логику создания экземпляра, и ссылается на вновь созданный объект через общий интерфейс ака Умный Конструктор. Давайте пройдемся по каждому из них.

1. Простая фабрика - это класс, в котором есть один метод с большим количеством операторов switch/if, который выбирает класс для создания. Пример:
class UserFactory {
public static User create(UserType type) {
switch (type) {
case UserType.USER: return new User();
case UserType.CUSTOMER: return new Customer();
case UserType.ADMIN: return new Admin();
default:
throw new Exception("Wrong user type passed.");
}
}
}
Недостатком такого подхода является то, что для того, чтобы добавить новый класс, нам придется изменить сам класс, что нарушает Open-closed principle. Мы не можем наследовать от этого класса и добавить другой новый класс.

2. Фабричный метод - это абстрактный класс, в котором подклассы могут переопределять тип продукта, создаваемого в суперклассе. Он не только создает объекты, но и обладает другими методами. Пример:
abstract class Department {
public abstract Employee createEmployee(int id);

public void fire(int id) {
Employee employee = createEmployee(id);
employee.paySalary();
employee.dismiss();
}
}

class HRDepartment extends Department {
public Employee createEmployee(int id) {
return new HREmployee(id);
}
}

class ITDepartment extends Department {
public Employee createEmployee(int id) {
return new ITEmployee(id);
}
}
В отличие от простой фабрики, мы можем добавлять новые классы, не нарушая Open-closed principle.

3. Абстрактная фабрика предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов без указания их конкретных классов. Пример:
abstract class FurnitureFactory {
abstract public function createChair();
abstract public function createTable();
}

class VictorianFurnitureFactory extends FurnitureFactory {
public function createChair() {
return new VictorianChair();
}

public function createTable() {
return new VictorianTable();
}
}

class ModernFurnitureFactory extends FurnitureFactory {
public function createChair() {
return new ModernChair();
}

public function createTable() {
return new ModernTable();
}
}
Как вы можете видеть, абстрактная фабрика создает фабрику, которая создает семейства продуктов. Если вы пометите обычную фабрику ключевым словом abstract, она не станет абстрактной фабрикой!))

Что я читал?
Сравнение фабрик
Design Patterns: Factory vs Factory method vs Abstract Factory
Паттерн проектирования Factory

4. Лег спать в ~01:00
42 views17:55
Ашу / Түсініктеме
2023-01-25 20:55:57
Минутка мема про чистый код))
38 views17:55
Ашу / Түсініктеме
2023-01-25 20:54:31 День #9. Отчет за 24.01.2023

1. Принял душ

2. Не пользовался электроникой в течение ~ 30 минут

3. Я прочитал главу 12 книги "Чистый код". Чтобы создать хорошую архитектуру, автор советует следующие советы (правила приведены в порядке их важности):

1) Выполнение всех тестов. Система может быть идеально спланирована "на бумаге", но чтобы доказать, что система действительно работает, нам нужно написать тесты. Написание тестов оказывает влияние на другие части программы: пытаясь написать больше точечных тестов, мы создаем узкоспециализированные классы, которые соответствуют принципу SRP. Кроме того, с полным набором тестов мы можем вносить изменения (менять имплементации, рефакторинг и другие), не опасаясь, что система сломается.

2) Отсутствие дублирования. Чтобы создать чистую систему, необходимо сознательно стремиться к устранению дубликатов, пусть даже всего в нескольких строках кода. В процессе поиска дублирующего кода мы бы начали обнаруживать, что нарушаем принцип SRP на этом микроскопическом уровне. Таким образом, принцип "повторного использования даже в мелочах" может привести к значительному снижению сложности системы.

3) Выразительность. Легко написать код, понятный самим себе, потому что в момент его написания мы глубоко понимаем решаемую проблему. Другие программисты, которые будут участвовать в поддержании этого кода, не будут иметь такого понимания. Как только наш код работает, мы обычно переходим к следующей задаче, не прилагая особых усилий к тому, чтобы сделать код легким для чтения другими людьми. Но помните: следующим человеком, которому придется разбираться в вашем коде, скорее всего, будете вы сами.

4) Минимум классов и методов. Постройте систему так, чтобы она была компактной, но в то же время сохраняла компактность функций и классов. Но, стремясь уменьшить объем кода наших классов и методов, мы можем создать слишком много крошечных классов и методов. Избегайте этого. Однако следует помнить, что из четырех правил простой архитектуры это правило имеет наименьший приоритет.

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

4. Лег спать ~ в 23:50
37 views17:54
Ашу / Түсініктеме
2023-01-24 20:16:03 День #8. Отчет за 23.01.2023

1. Не принял

2. Не пользовался электроникой в течение ~ 30 минут

3. Прочитал часть 1 из серии статей "Thread'ом Java не испортишь". Многопоточность - одна из важных концепций программирования, особенно при написании больших проектов. В Java вы можете создать поток 2 способами:
1) Создайте объект, реализующий интерфейс Runnable, и передайте его классу Thread
2) Создайте объект, унаследованный от класса Thread
Существует также два типа потоков: daemon и non-daemon. Процесс будет продолжаться до тех пор, пока существует один non-daemon поток. Если не осталось non-daemon потоков, процесс (программа) сразу завершится, несмотря на то, что daemon потоки остались. Это означает, что daemon потоки могут быть завершены в любой момент. Следовательно, daemon потоки подходят для служебных задач.

4. Лег спать ~ в 23:50
43 views17:16
Ашу / Түсініктеме
2023-01-23 09:20:01 День #7. Отчет за 22.01.2023

1. Не сегодня

2. Не пользовался электроникой ~30 минут

3. Еще один шаг к тому, чтобы научиться писать чистый код , Посмотрел видео "Don't Write Comments". Вы пишете комментарии, чтобы сделать код более понятным, но чистый код не требует комментариев, звучит противоречиво? Ваш код должен быть чистым, чтобы он не требовал комментариев и был понятен при взгляде на имена функций и переменных. Кроме того, комментарии часто лгут. Когда люди меняют код, они забывают изменить комментарии, связанные с нами, и комментарии начнут дезинформировать. Но нет правил без исключений. Можно писать комментарии, если вы используете математические формулы или алгоритмы, которые многие не знают. Комментарии могут лгать, но код - нет.

4. Лег спать в ~23:50
45 views06:20
Ашу / Түсініктеме
2023-01-22 16:39:00 День #6. Отчет за 21.01.2023

1. Принял душ после пробуждения

2. Не использовал ~30 минут

3. Посмотрел видео "Why You Shouldn't Nest Your Code". Я нашел годный канал по программированию, что-то вроде 3blue1brown для программистов. Когда мы пишем код, особенно в спешке, мы не замечаем, как пишем грязный код. После этого, когда мы сядем за компьютер в следующий раз, мы не захотим переписывать старый код, потому что зачем его переписывать, если он работает? Затем мы продолжаем писать грязный код поверх старого кода, как будто кладем кирпичи. Потом когда-нибудь будет так поздно, что мы сами не поймем, что происходит в коде, и будем переписывать с самого начала.

Один из способов написания грязного кода - это "Вложенный код". Если глубина вашего вложенного кода превышает 4, вам следует просмотреть свой код. Если вы считаете, что сократить ваш код невозможно, Линукс Торвальдс однажды сказал: "Если вам нужно более 3 уровней отступов, вы все равно облажались и должны исправить свою программу". Автор видео предлагает две техники борьбы с вложенным кодом:

1) Извлечение метода: выделить блок кода для нового метода (или функции) и вызовите этот метод вместо старого кода.
2) "Инверсировать" условные операторы

4. Лег спать в ~23:30
41 views13:39
Ашу / Түсініктеме
2023-01-21 20:25:13 День #5. Отчет за 20.01.2023

1. Не сегодня
2. Не использовал ~30 минут
3. Я посмотрел видео

По моему, "Почему вы хотите у нас работать?" - очень затруднительный вопрос для программистов, но в тоже время может стать рещающим факторов при принятии решении. Как не надо отвечать? (Топ 3 ошибки):
1) Я посмотрел видео

. На мой взгляд, "Почему вы хотите работать с нами?" - очень сложный вопрос для программистов, но в то же время он может стать решающим фактором при принятии решения принять вас. Как не стоит отвечать? (Топ-3 ошибок):

1) Я хочу денег/заработать деньги. Это говорит компании о том, что если какая-то другая компания предложит больше, то вы немедленно уйдете. А деньги - это ненадежная и краткосрочная мотивация.
2) Я хочу покинуть страну X. Компания считает, что вам нужно только разрешение на работу, и как только вы его получите, вы начнете искать места получше. Кроме того, может выйти, что вы склонны к мотивации "от", (часто люди, имеющие мотивацию "от", приносят негатив).
3) "Это вы преследовали меня в течение трех месяцев, ваш рекрутер написал мне в linkedin. И теперь я соизволил прийти к вам на собеседование, это вы должны сказать мне, почему вы хотите работать со мной". Это сразу же становится red flag-ом для компании, показывает вас как высокомерного человека, и с вами трудно работать в команде.

Как ответить на такой вопрос? Придумайте историю, которая вам близка, чтобы она была похожа на правду. И ваш ответ был желательно позитивным, и вами двигала позитивная мотивация. И бонус: прочитайте о миссиях и задачах компаний перед собеседованием.
4. Лег спать в 01:00, разбирал свой ноутбук. Сегодня лягу спать в 23:00
42 viewsedited  17:25
Ашу / Түсініктеме
2023-01-20 20:03:49 NurBlog: С нуля до джуна pinned «Почему не стоит хейтить Java за ее многословие (verbosity)? Сегодня многие люди все еще хейтят Java из-за ее многословия, и я думаю, что это необоснованно. На самом деле Java многословна, и написанный код оказывается громоздким по сравнению с другими языками.…»
17:03
Ашу / Түсініктеме