<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: shoshinmas</title>
    <description>The latest articles on DEV Community by shoshinmas (@shoshinmas).</description>
    <link>https://dev.to/shoshinmas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F413886%2F207f2939-40ff-4cf9-824a-a083eeeb08b8.jpeg</url>
      <title>DEV Community: shoshinmas</title>
      <link>https://dev.to/shoshinmas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shoshinmas"/>
    <language>en</language>
    <item>
      <title>Successful Russian attack on Polish powerplant</title>
      <dc:creator>shoshinmas</dc:creator>
      <pubDate>Wed, 21 Jan 2026 08:46:20 +0000</pubDate>
      <link>https://dev.to/shoshinmas/successful-russian-attack-on-polish-powerplant-1l89</link>
      <guid>https://dev.to/shoshinmas/successful-russian-attack-on-polish-powerplant-1l89</guid>
      <description>&lt;p&gt;Polish biomass-fired district heating plant in Ruciane-Nida was successfully manipulated by cyber threat actors linked to Russia. Attackers altered technical operating parameters of one of the boilers (1 000 kW), but operators quickly detected and reversed the changes before any harm occurred. The plant continued normal operation, and heat delivery to residents remained unaffected. The incident was reported to CERT Polska and local law enforcement.&lt;/p&gt;

&lt;p&gt;more with sources: &lt;a href="https://cybersecwaw.hashnode.dev/pro-russian-group-launches-successful-attack-on-polish-heating-plant" rel="noopener noreferrer"&gt;https://cybersecwaw.hashnode.dev/pro-russian-group-launches-successful-attack-on-polish-heating-plant&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Review of important Java changes from version 8 till 21</title>
      <dc:creator>shoshinmas</dc:creator>
      <pubDate>Thu, 06 Jul 2023 19:27:34 +0000</pubDate>
      <link>https://dev.to/shoshinmas/review-of-important-java-changes-from-version-8-till-21-533j</link>
      <guid>https://dev.to/shoshinmas/review-of-important-java-changes-from-version-8-till-21-533j</guid>
      <description>&lt;h2&gt;
  
  
  Java 8
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Lambda Expressions&lt;/em&gt;* — The introduction of lambda expressions is the most important change in Java 8. They enable the creation of anonymous functions and promote a functional programming style.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List&amp;lt;String&amp;gt; names = Arrays.asList(“Jan”, “Adam”, “Ewa”);
Collections.sort(names, (a, b) -&amp;gt; b.compareTo(a));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Stream APIs&lt;/em&gt;* — A new API is used to support streaming operations on data in collections, fundamentally changing the way data is manipulated.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List&amp;lt;String&amp;gt; names = Arrays.asList(“Jan”, “Adam”, “Ewa”);
List&amp;lt;String&amp;gt; upperCaseNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Interfaces with default methods&lt;/strong&gt; — Java 8 introduced the ability to define default methods in interfaces, allowing new functions to be added to existing interfaces without compromising compatibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java 9
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Jigsaw (Project Jigsaw)&lt;/strong&gt; — The introduction of modularity to the Java platform is a major feature of Java 9. Modules make it easier to scale applications for both small and large projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REPL (JShell)&lt;/strong&gt; — JShell is an interactive command shell that allows you to quickly test code snippets without having to create a full class.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java 10
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Local type inference&lt;/strong&gt; — Java 10 introduces type inference for local variables, which means we no longer have to declare the type of the variable — the compiler will do it itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var text = “Hello, Java 10”; // Type Inference
System.out.println(text);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Java 11
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Running .java files&lt;/strong&gt; — Since Java 11, it is possible to directly run .java files without first compiling them to .class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP Client API&lt;/strong&gt; — The new HTTP client API, which was available as an “incubator feature” in Java 9 and 10, is now a full-fledged API as of Java 11.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java 12
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Switch Expressions&lt;/em&gt;* — The switch has been improved and now offers a more concise and secure syntax.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String day = “MONDAY”;
String result = switch (day) {
case “MONDAY”, “TUESDAY”, “WEDNESDAY”, “THURSDAY”, “FRIDAY” -&amp;gt; “Weekday”;
case “SATURDAY”, “SUNDAY” -&amp;gt; “Weekend”;
default -&amp;gt; throw new IllegalArgumentException(“Invalid day: “ + day);
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Java 13
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Text Blocks&lt;/strong&gt; — The introduction of text blocks has made it easier to work with multi-line text in Java.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java 14
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Records&lt;/strong&gt; — Records are a new type of references in Java, which are non-mutable data. They make it easier to create classes that are just data carriers.&lt;/p&gt;

&lt;p&gt;public record Point(int x, int y) {} // Defining a record&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern Matching for instanceof&lt;/strong&gt; — This feature increases code readability by eliminating unnecessary type casting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Object obj = “Hello”;
if (obj instanceof String s) {
System.out.println(s.toLowerCase());
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Java 15
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sealed Classes&lt;/strong&gt; — A sealed class allows programmers to specify which other classes can inherit from it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public sealed class Shape
permits Circle, Rectangle {}

public final class Circle extends Shape {…}

public final class Rectangle extends Shape {…}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Java 16
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Records (stable version)&lt;/strong&gt; -Records that were previously available&lt;/p&gt;

&lt;p&gt;available in the preview version, have become full-fledged language elements in Java 16.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern Matching for instanceof (Stable Version)&lt;/strong&gt; — As with records, the pattern feature for instanceof, which was previously available in the preview version, has been officially introduced in Java 16.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java 17
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sealed Classes (Stable Version)&lt;/strong&gt; — In Java 17, the sealed class, which was previously available as a preview feature, has become a full-fledged part of the language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern Matching for Switch (Preview)&lt;/strong&gt; — Java 17 introduced patterns for switch expressions as a preview feature, which has the potential to increase code readability and security.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java 18
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Panama (Preview)&lt;/strong&gt; — This is one of the most anticipated projects for Java. The goal of Panama is to improve Java’s interoperability with native C/C++ code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java 19
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Valhalla (Preview)&lt;/strong&gt; — This is a long-awaited project that aims to introduce value types (value types) and specialization of generics into Java, improving performance and memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java 20
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Loom (Preview)&lt;/strong&gt; — Project Loom aims to add lightweight threads (so-called “fibres”) to the JVM, increasing the efficiency of multithreading in Java.&lt;/p&gt;

&lt;h3&gt;
  
  
  Java 21 — upcoming
&lt;/h3&gt;

&lt;p&gt;Although plans for Java 21 are still unclear, we can expect further development and fixes for preview features from previous versions, as well as new features that will continue the development of Java as a programming language and platform.&lt;/p&gt;

&lt;p&gt;This is truly an exciting time for Java developers, as the language continues to evolve with new features and enhancements designed to make developers’ daily work easier. We look forward to the next versions of Java!&lt;/p&gt;

</description>
      <category>beginners</category>
    </item>
    <item>
      <title>Understanding Object-Oriented Programming (OOP): A guide for bootcamp graduates</title>
      <dc:creator>shoshinmas</dc:creator>
      <pubDate>Fri, 24 Mar 2023 08:47:24 +0000</pubDate>
      <link>https://dev.to/shoshinmas/understanding-object-oriented-programming-oop-in-java-a-guide-for-bootcamp-graduates-poi</link>
      <guid>https://dev.to/shoshinmas/understanding-object-oriented-programming-oop-in-java-a-guide-for-bootcamp-graduates-poi</guid>
      <description>&lt;p&gt;Bootcamps can be a great way to kickstart your programming career, but they may not always provide a comprehensive understanding of Object-Oriented Programming (OOP) concepts in Java. As a bootcamp graduate myself, I know firsthand how important it is to supplement your education with additional learning resources to succeed as a software developer.&lt;/p&gt;

&lt;p&gt;My background is in digital marketing, where I spent more than 15 years working as a liaison between clients and tech teams. While I enjoyed implementing tracking pixels and solving problems with tag management, I decided that I wanted to take my skills to the next level and learn how to create programs myself. At the age of 35, I enrolled in an offline bootcamp that was supposed to cover the basics to intermediate levels of programming in Java.&lt;/p&gt;

&lt;p&gt;However, I soon realized that the knowledge I gained from the bootcamp was only suitable for beginners. The same amount of knowledge could be obtained from online courses on Udemy and other platforms. When I landed my first job as a developer - not in Java, but in PHP - I realized that what was really important for success in the field was an understanding of OOP principles and the ability to work effectively in a team.&lt;/p&gt;

&lt;p&gt;So, what are the principles of OOP? In OOP, everything is represented as an object, which has properties and methods. The four main principles of OOP are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Encapsulation: This principle is about grouping related data and functions together into a single unit called a class. Encapsulation helps to hide the implementation details of a class from other classes, which makes it easier to modify the code in the future without affecting the other parts of the program.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inheritance: This principle allows you to create a new class by inheriting the properties and methods of an existing class. Inheritance is useful for creating new classes that are similar to existing ones, but with some additional or modified functionality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Polymorphism: This principle refers to the ability of objects to take on multiple forms. Polymorphism allows you to use a single interface to represent multiple types of objects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Abstraction: This principle is about focusing on the essential features of an object and ignoring the non-essential ones. Abstraction allows you to create simpler and more manageable code by hiding the complexity of the underlying implementation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are also some essential sets of rules that you should know before you even try to apply for a position. They have elegant abbreviations that help you memorize them: KISS, DRY and SOLID. &lt;/p&gt;

&lt;p&gt;SOLID: SOLID is an acronym that stands for Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion. These five principles are considered fundamental to building robust, maintainable software.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Single Responsibility Principle: This principle states that a class should have only one reason to change. Each class should do one thing, and do it well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open-Closed Principle: This principle states that classes should be open for extension, but closed for modification. In other words, you should be able to add new functionality without having to change existing code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Liskov Substitution Principle: This principle states that subclasses should be substitutable for their base classes. In other words, you should be able to use a subclass wherever you can use its parent class.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interface Segregation Principle: This principle states that clients should not be forced to depend on interfaces they do not use. Interfaces should be tailored to specific use cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dependency Inversion Principle: This principle states that high-level modules should not depend on low-level modules. Instead, they should both depend on abstractions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;KISS: KISS stands for "Keep it simple, stupid." This principle states that software should be designed as simply as possible, without unnecessary complexity. Simple code is easier to read, test, and maintain.&lt;/p&gt;

&lt;p&gt;DRY: stands for Don't Repeat Yourself. I won't repeat myself, it's self-explanatory. This applies to both one class/module that you create as for the whole application. Especially when you work with frameworks. &lt;/p&gt;

&lt;p&gt;Frameworks... Frameworks are also something that the cheap bootcamps mostly ommit. Basically, the whole bootcamp that you pay the $1-2k for should be an introduction to handling a framework and understanding what part of application would you like to engineer: back-end, front-end, or do you want to go for the whole stuff from the beginning. &lt;/p&gt;

&lt;p&gt;In addition to OOP principles and frameworks, it's also important for developers to know how to work effectively in a team. This includes skills such as documentation, task estimation, and version control. Some of the essential tools for team collaboration include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Documentation: Good documentation is essential for ensuring that other team members can understand your code and use it effectively. This includes comments in the code, README files, and technical specifications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Task estimation: Being able to estimate the time needed for a task is essential for effective project planning. This involves breaking down tasks into smaller sub-tasks, estimating the time required for each sub-task, and keeping track of progress.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Version control: Version control tools such as Git allow team members to collaborate on a codebase without overwriting each other's work. Version control also enables developers to revert to earlier versions of the code if necessary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, it's worth noting that one year of coding on platforms such as Hyperskill by JetBrains is a great way to gain a deeper understanding of your chosen language and prepare for your first job as a developer. While bootcamps can provide a good starting point, it's important to continue learning and practicing on your own to build your skills and become a successful software developer.&lt;/p&gt;

</description>
      <category>bootcamp</category>
      <category>career</category>
      <category>beginners</category>
      <category>abotwrotethis</category>
    </item>
  </channel>
</rss>
