<?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: Paweł </title>
    <description>The latest articles on DEV Community by Paweł  (@wawrzyniak).</description>
    <link>https://dev.to/wawrzyniak</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%2F1246982%2Ffbff94b1-04bd-435b-a257-d9bef5695f74.png</url>
      <title>DEV Community: Paweł </title>
      <link>https://dev.to/wawrzyniak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wawrzyniak"/>
    <language>en</language>
    <item>
      <title>Anemic Model vs Rich model</title>
      <dc:creator>Paweł </dc:creator>
      <pubDate>Sat, 17 Feb 2024 14:14:02 +0000</pubDate>
      <link>https://dev.to/wawrzyniak/anemic-model-vs-rich-model-g94</link>
      <guid>https://dev.to/wawrzyniak/anemic-model-vs-rich-model-g94</guid>
      <description>&lt;h1&gt;
  
  
  Anemic Model
&lt;/h1&gt;

&lt;p&gt;Someday I fall into a trap and use this anemic model where I should not.&lt;/p&gt;

&lt;p&gt;I know that hiding implementation is important.&lt;br&gt;
Therefore the anemic model which has all properties available by getters and setters is not a good solution, because any programmer can call any setter and change the state of the object. Such a Class does not have any business logic, all logic is in other classes like Services or Helpers (therefore named "anemic").&lt;/p&gt;
&lt;h2&gt;
  
  
  Stability
&lt;/h2&gt;

&lt;p&gt;It is effortless and you may ask why this is a problem.&lt;/p&gt;

&lt;p&gt;Let's say you need to set variable is available when some condition is true (e.g. stockQuantity &amp;gt; 50) &lt;br&gt;
If you used this setter you need to write code like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function changeAvaiblity() {
if (stockQuantity &amp;gt; 50) {
    $product-&amp;gt;setAvaible(true);
}
...
// Product class
public function setAvaibility(bool $avaible): void {
   $this-&amp;gt;avaible = $avaible;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but how do you ensure that this condition will be covered in another part of the system?&lt;/p&gt;

&lt;p&gt;Maybe some programmers did not go too deep and hack your solution&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
$product_service-&amp;gt;changeAvaiblity();
...
$product-&amp;gt;setAvaibility(true);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you see setters can be run at any time and change state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better solution
&lt;/h2&gt;

&lt;p&gt;So I avoid setting via public setter but I use a private method. But there is a catch here.  &lt;/p&gt;

&lt;p&gt;Imagine I will get new business requirements, there I wrote a new function but forgot to call the function &lt;code&gt;setAvaibility(true)&lt;/code&gt; and my state of the object is not correct.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use the constructor to set an initial state
&lt;/h3&gt;

&lt;p&gt;The best solution is to use a constructor to set the initial state and simply to avoid to situation where the state of the object is not correct.&lt;/p&gt;

&lt;h1&gt;
  
  
  Rich domain model
&lt;/h1&gt;

&lt;p&gt;This action is a part of the Rich domain model where we create our models to avoid creating objects in incorrect states.&lt;/p&gt;

&lt;p&gt;The purpose of the rich domain model is to create consistent classes, all variables and public interfaces of the class are consistent, and present domain logic.&lt;/p&gt;

&lt;p&gt;To archive that, we can use e.g. &lt;a href="https://martinfowler.com/bliki/ValueObject.html"&gt;Value Objects&lt;/a&gt; which can guard our rules.&lt;/p&gt;

&lt;p&gt;We expose business logic methods not states of objects.&lt;br&gt;
So we use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
public function isAvailableForSale(): bool {
if (stockQuantity &amp;gt; MINIMUM_STOCK_VALUE) {
    $product-&amp;gt;avaible = true;
}

return $this-&amp;gt;avaible;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the Rich domain model, we expose behaviors. For my little example, behavior is 'Is Product available for sale' but this could be any other question &lt;/p&gt;

&lt;p&gt;There is one more point for using rich domain models.&lt;br&gt;
Testing the Rich domain model is much easier than testing the Amenic model. &lt;/p&gt;

&lt;h2&gt;
  
  
  When we use the Anemic model
&lt;/h2&gt;

&lt;p&gt;We use them as DTOs (Data Transfer Objects) because we want only to read data and send it through e.g. in RestApi, or to send data between layers of our application or for Database entities.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;If you need simply DTO, you can create The Anemic model.&lt;br&gt;
But if there is more logic and it is not a simple CRUD you should use The Rich domain model to lean your logic on stable behaviors/contracts which are easy to test and help you to avoid introducing your objects in an incorrect state and make logic and application more consistent. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Be lazy and use Tools (ECS and PHPstan).</title>
      <dc:creator>Paweł </dc:creator>
      <pubDate>Thu, 08 Feb 2024 22:36:15 +0000</pubDate>
      <link>https://dev.to/wawrzyniak/be-lazy-and-use-tools-ecs-and-phpstan-3en1</link>
      <guid>https://dev.to/wawrzyniak/be-lazy-and-use-tools-ecs-and-phpstan-3en1</guid>
      <description>&lt;h1&gt;
  
  
  Be lazy
&lt;/h1&gt;

&lt;p&gt;Be lazy and use Tools, I heard this earlier and totally agree.&lt;/p&gt;

&lt;p&gt;They save you time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Easy coding standard
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/easy-coding-standard/easy-coding-standard"&gt;https://github.com/easy-coding-standard/easy-coding-standard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tool helps you to keep your code consistent.&lt;/p&gt;

&lt;p&gt;The best thing is to get one of the predefined sets and use it in your project, If you want to exclude or add some rules then it is easy to do in your ecs.php file.&lt;/p&gt;

&lt;p&gt;The code below uses PRS-12 and excludes Yoda Style (which I personally don't like :) ) and adds some useful Rules e.g. remove unused imports from files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

declare(strict_types=1);

use PhpCsFixer\Fixer\ControlStructure\YodaStyleFixer;
use PhpCsFixer\Fixer\Import\NoUnusedImportsFixer;
use PhpCsFixer\Fixer\Import\OrderedImportsFixer;
use PhpCsFixer\Fixer\Import\SingleLineAfterImportsFixer;
use Symplify\EasyCodingStandard\Config\ECSConfig;

return ECSConfig::configure()
    -&amp;gt;withPaths([
        __DIR__ . '/config',
        __DIR__ . '/public',
        __DIR__ . '/src',
    ])
    -&amp;gt;withRules([
        NoUnusedImportsFixer::class,
        OrderedImportsFixer::class,
        SingleLineAfterImportsFixer::class,
    ])
    -&amp;gt;withSkip([
        YodaStyleFixer::class,
    ])
    -&amp;gt;withPhpCsFixerSets(
        psr12: true,
    );
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can add as a script to the composer and add to the pipeline to ensure that all members of the team will keep code with standards, that are set in the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  PHPStan
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://phpstan.org/user-guide/getting-started"&gt;https://phpstan.org/user-guide/getting-started &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tool helps you to avoid some bugs or make the code more clean.&lt;/p&gt;

&lt;p&gt;The command is run by&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vendor/bin/phpstan analyse [options] [&amp;lt;paths&amp;gt;...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can improve your code step by step because we start from the default 0 level and we can validate the project to max level (9)&lt;/p&gt;

&lt;p&gt;I recommend using phpstan.neon.dist in your repository (default configuration).&lt;/p&gt;

&lt;p&gt;If you want you can override it by phpstan.neon and add their own rules (e.g. change level).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;includes:
    - phpstan.neon.dist
parameters:
    level: 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Baseline and ignoring errors, exclude paths
&lt;/h3&gt;

&lt;p&gt;You can start using it in legacy code because you can &lt;br&gt;
ignore specific errors, and generate a baseline, which will ignore all errors, that you now have in the project. You can fix it later, but at the beginning concentrate only on new code in the project. You can exclude also some directories or classes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Nice feature in the config
&lt;/h3&gt;

&lt;p&gt;I like an option to set a clickable link in the code editor after running phpstan&lt;/p&gt;

&lt;p&gt;e.g. for PHPStorm (for local)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;parameters:
    editorUrl: 'vscode://file/%%file%%:%%line%%'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more look at the documentation, there are still some interesting things.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Briefly about Clean Architecture</title>
      <dc:creator>Paweł </dc:creator>
      <pubDate>Mon, 15 Jan 2024 19:29:22 +0000</pubDate>
      <link>https://dev.to/wawrzyniak/briefly-about-clean-architecture-3oea</link>
      <guid>https://dev.to/wawrzyniak/briefly-about-clean-architecture-3oea</guid>
      <description>&lt;h2&gt;
  
  
  Image is worth more than 1000 words
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xx_b31SF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q4kiuafl0vfiop7h67we.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xx_b31SF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q4kiuafl0vfiop7h67we.jpg" alt="Image description" width="772" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The image above can tell you everything, but below is small description.&lt;/p&gt;

&lt;h2&gt;
  
  
  About Clean Architecture
&lt;/h2&gt;

&lt;p&gt;It is a principle that has been propagated by Robert C. Martin (a.k.a Uncle Bob) to mix other architecture such as:&lt;br&gt;
    - Hexagonal Architecture (a.k.a Port and Adapters)&lt;br&gt;
    - Onion Architecture&lt;br&gt;
    - Screaming Architecture &lt;br&gt;
    - Data, context, and interaction Architecture (DCI)&lt;br&gt;
    - Boundary Control Entity Architecture ( BCE )&lt;/p&gt;

&lt;p&gt;As Uncle Bob found out, all these architectures are similar and have separations. They are divided by software layers and each architecture has a layer for business logic and interfaces.&lt;br&gt;
Therefore this architecture produces systems that are:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Independent of Framework. The architecture does not depend on the existence of some library of feature laden software. This allows you to use such frameworks as tools, rather than having to cram your system into their limited constraints.&lt;br&gt;
Testable. The business rules can be tested without the UI, Database, Web Server, or any other external element.&lt;/p&gt;

&lt;p&gt;Independent of UI. The UI can change easily, without changing the rest of the system. A Web UI could be replaced with a console UI, for example, without changing the business rules.&lt;/p&gt;

&lt;p&gt;Independent of Database. You can swap out Oracle or SQL Server, for Mongo, BigTable, CouchDB, or something else. Your business rules are not bound to the database.&lt;/p&gt;

&lt;p&gt;Independent of any external agency. In fact your business rules simply don’t know anything at all about the outside world.&lt;br&gt;
These all are very nice advantages to use this architecture.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Dependency Rule
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This rule says that source code dependencies can only point inwards. Nothing in an inner circle can know anything at all about something in an outer circle&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Entities
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Entities encapsulate Enterprise wide business rules.&lt;/p&gt;

&lt;p&gt;Entities are the business objects of the application. They encapsulate the most general and high-level rules. &lt;br&gt;
They are the least likely to change when something external changes. For example, you would not expect these objects to be affected by a change to page navigation, or security.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The software in this layer contains application specific business rules.&lt;/p&gt;

&lt;p&gt;These use cases orchestrate the flow of data to and from the entities, and direct those entities to use their enterprise wide business rules to achieve the goals of the use case.&lt;/p&gt;

&lt;p&gt;We do not expect changes in this layer to affect the entities. &lt;br&gt;
We also do not expect this layer to be affected by changes to externalities such as the database, the UI, or any of the common frameworks.&lt;br&gt;
This layer is isolated from such concerns.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Interface Adapters
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The software in this layer is a set of adapters that convert data from the format most convenient for the use cases and entities, to the format most convenient for some external agency such as the Database or the Web. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Presenters, Views, and Gateways (Repositories) are here. Data are converted in this layer and pushed back and forth through use cases and entities.&lt;/p&gt;

&lt;p&gt;In this layer, you need to expect Adapters :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Frameworks and Drivers.
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The outermost layer is generally composed of frameworks and tools such as the Database, the Web Framework, etc. &lt;br&gt;
Generally you don’t write much code in this layer other than glue code that communicates to the next circle inwards.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Only Four Circles?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;No, the circles are schematic. You may find that you need more than just these four. &lt;br&gt;
However, The Dependency Rule always applies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Crossing boundaries.
&lt;/h2&gt;

&lt;p&gt;We use the Dependency Inversion principle&lt;br&gt;
If your Presenter wants to use a Use case, he needs to use an interface to call it.&lt;/p&gt;

&lt;p&gt;Use Case Output =&amp;gt; interactor =&amp;gt; Use case input&lt;/p&gt;

&lt;h2&gt;
  
  
  What data crosses the boundaries?
&lt;/h2&gt;

&lt;p&gt;Use simple data structures as Data Transfer Objects (DTO) to transfer data through the layers.&lt;br&gt;
You use it instead of the Resulting Data structure from Database (ResultQuery)&lt;/p&gt;

&lt;h2&gt;
  
  
  Uncle Bob's Conclusion
&lt;/h2&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Conforming to these simple rules is not hard, and will save you a lot of headaches going forward.&lt;/p&gt;

&lt;p&gt;By separating the software into layers, and conforming to The Dependency Rule, you will create a system that is intrinsically testable, with all the benefits that implies. &lt;/p&gt;

&lt;p&gt;When any of the external parts of the system become obsolete, like the database, or the web framework, you can replace those obsolete elements with a minimum of fuss.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  My Experience without Clean Architecture
&lt;/h2&gt;

&lt;p&gt;I still gather my experience in this architecture, however, I have written some features in this architecture.&lt;br&gt;
I remember when we established a common interface between domains. Me and my team colleague wrote this code and it worked as we expected.&lt;br&gt;
Some refactoring was needed because, as we found out later, we should use the same use case, the base of logic was stable and separated behind a stable interface.&lt;br&gt;
Which helps us even if we don't know too many details about the partner's code.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>programming</category>
    </item>
    <item>
      <title>Improve yourself as a programmer</title>
      <dc:creator>Paweł </dc:creator>
      <pubDate>Sat, 06 Jan 2024 17:05:20 +0000</pubDate>
      <link>https://dev.to/wawrzyniak/improve-yourself-as-a-programmer-489a</link>
      <guid>https://dev.to/wawrzyniak/improve-yourself-as-a-programmer-489a</guid>
      <description>&lt;p&gt;Sometimes we are stuck. Therefore it is nice to have peoples which pushes us in the right direction. This weekend one of them sent me a video &lt;a href="https://www.youtube.com/watch?v=q-_ezD9Swz4"&gt;https://www.youtube.com/watch?v=q-_ezD9Swz4&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;This is what I have learned from this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn how to learn.
&lt;/h2&gt;

&lt;p&gt;As programmers we need to learn a lot, however, if you have your formula it's much simpler and more effective. I heard that &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;WE REMEMBER&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;10% of what we read&lt;br&gt;
20% of what we hear&lt;br&gt;
30% of what we see&lt;br&gt;
50% of what we see and hear&lt;br&gt;
70% of what we discuss with others&lt;br&gt;
80% of what we personally experience&lt;br&gt;
95% of what we teach others&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Edgar Dale&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course, there is a Feynman's method, but I still working to implement this in my circle of learning.&lt;/p&gt;

&lt;p&gt;Why learning is important&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rapidly changing technologies&lt;/li&gt;
&lt;li&gt;code is a tool for your customer, it needs to solve the problem&lt;/li&gt;
&lt;li&gt;adaptability, sometimes you are not in control, you need to adapt your knowledge to the situation and learn fast to fill the gap.&lt;/li&gt;
&lt;li&gt;independent learning, not everything is in documentation, by practice we discover many useful things, but it takes time.&lt;/li&gt;
&lt;li&gt;productivity, if you are more efficient in learning then you have more time for other activities, therefore is good to be efficient.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Motivation
&lt;/h2&gt;

&lt;p&gt;What excites you and why you code are the proper questions. &lt;br&gt;
You need to know whether you want to code because of your career or you want to write an app or it is simply your hobby. But I think it is nice to have some fun or a strict reason to do this, because when problems appears then you can fall back on your motivation, without asking yourself (x100)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why do I do this?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Fundamentals are the most important
&lt;/h2&gt;

&lt;p&gt;the author says that you need to use specific technologies when you need to solve specific problems&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Web -&amp;gt; HTML/CSS/JS after this you can learn backend&lt;/li&gt;
&lt;li&gt;  Mobile IOS -&amp;gt; swift&lt;/li&gt;
&lt;li&gt;  Mobile Android -&amp;gt; Kotlin, Java&lt;/li&gt;
&lt;li&gt;  Mobile Android and IOS -&amp;gt; ReactNative, Flutter&lt;/li&gt;
&lt;li&gt;  Video games -&amp;gt; Unity (C#), GODOT (C#), Unreal (C++)&lt;/li&gt;
&lt;li&gt;  Machine Learning -&amp;gt; python&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I agree, however, I think there are other possibilities and if you want to write the game, you can do it in JS, but it will be a game in the browser, so use proper technology for your problem. &lt;/p&gt;

&lt;h2&gt;
  
  
  Avoiding Tutorial Hell
&lt;/h2&gt;

&lt;p&gt;You need to have a limit to watch tutorials and simply to use the knowledge, which you gather for it.&lt;/p&gt;

&lt;p&gt;You need to challenge yourself to solve problems and use the skills that you learned.&lt;/p&gt;

&lt;p&gt;This help you &lt;/p&gt;

&lt;h2&gt;
  
  
  Build Portfolio
&lt;/h2&gt;

&lt;p&gt;The projects that you wrote will speak for themselves. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Code will tell the truth&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Circle of Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;write code (not try to be perfect at first time)&lt;/li&gt;
&lt;li&gt;learning &lt;/li&gt;
&lt;li&gt;iterating&lt;/li&gt;
&lt;li&gt;improving&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For me first point it's quite hard. I have many thoughts, I can do this think in this or that way, and waste too much time. Instead of writing a code and measuring the results or simply asking someone with more experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Buddy/Mentor or Share your code
&lt;/h2&gt;

&lt;p&gt;If you share your code with others they can give you feedback and your circle of learning speeds up. Same situation if you have a Buddy or Mentor, who can verify your ideas and help you improve your code. Code Review is a good tool that can help us to become better programmers, and many of us like open source projects.&lt;/p&gt;

&lt;p&gt;So as the author of the video says&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You have to work very hard &lt;br&gt;
and now you know, what you need to work hard.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>career</category>
    </item>
  </channel>
</rss>
