<?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: Railwaymen</title>
    <description>The latest articles on DEV Community by Railwaymen (@railwaymen).</description>
    <link>https://dev.to/railwaymen</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%2Forganization%2Fprofile_image%2F2244%2F73622063-aafe-4598-8dd1-3a5f0ff0cab2.png</url>
      <title>DEV Community: Railwaymen</title>
      <link>https://dev.to/railwaymen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/railwaymen"/>
    <language>en</language>
    <item>
      <title>How to write a clean code in Ruby on Rails? [2020 Update]</title>
      <dc:creator>Iza Rokita</dc:creator>
      <pubDate>Thu, 18 Mar 2021 15:02:52 +0000</pubDate>
      <link>https://dev.to/railwaymen/how-to-write-a-clean-code-in-ruby-on-rails-2020-update-lg</link>
      <guid>https://dev.to/railwaymen/how-to-write-a-clean-code-in-ruby-on-rails-2020-update-lg</guid>
      <description>&lt;p&gt;Time flies, doesn’t it? I remember writing the 1st edition of this article 6 years ago when world haven’t heard about the COVID-19 and I was just an aspiring RoR developer trying to do my best at &lt;a href="https://railwaymen.org/" rel="noopener noreferrer"&gt;Railwaymen&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I came a long way to a Team Leader role and certainly learnt a lot since then. Was it possible by following the points I made back then? Certainly they didn’t hurt, but world caught up a bit and now they’re quite obvious. Given that, I hope you’re ready for the next round :).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.railwaymen.org%2Fhs-fs%2Fhubfs%2Fclean%2520code%2520ruby.jpg%3Fwidth%3D1250%26name%3Dclean%2520code%2520ruby.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.railwaymen.org%2Fhs-fs%2Fhubfs%2Fclean%2520code%2520ruby.jpg%3Fwidth%3D1250%26name%3Dclean%2520code%2520ruby.jpg" alt="Clean Code Ruby"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Listen, that’s great but why exactly should I care?
&lt;/h2&gt;

&lt;p&gt;Over those 6 years I’ve learnt that writing clean code is even more important than I thought initially. I’m not gonna repeat all the points from other blogs about why coding is an art and why you - here, now, - should worry about you 3 months from now. Instead, let’s open quite harsh.&lt;/p&gt;

&lt;p&gt;See, business doesn’t care how clean your code is.&lt;/p&gt;

&lt;p&gt;Trust me, they hardly even look at it. What they’re looking for is value: the amount of work you can get done in the given time boundaries.&lt;/p&gt;

&lt;p&gt;Defining value that way you may find yourself in tough spot, trying to convince business to give you some time for this thing called “refactoring”. Oh no, it doesn’t bring any more value to the project. Maybe it will run faster, maybe not, are you even sure you can measure the difference in the 1st phase of the startup? So you give up and you go back to writing feature after feature, until the code becomes unmaintainable. Then you start struggling to deliver and it’s all going way down from now on. What did you do wrong? How to convince business to give you the time to write your dream clean code? And why you did not get it, but the.. boy scoutes did?&lt;/p&gt;

&lt;h2&gt;
  
  
  How clean code helps business?
&lt;/h2&gt;

&lt;p&gt;Let’s leave technicalities for a moment. Instead, put yourself in the shoes of the business CEO. You have a vision, you know what you want to build, you know that you have roughly 2 months to reach the market to profit from the niche you found. You quickly find a dev team and you start your first sprint. Things are looking great, you’re moving fast, product is released, you pick up your first customers. With customers inevitably come more use cases so you have to develop even more and even faster. Then, the strangest thing happens: turns out that your development team takes more and more time to deliver. You don’t understand this.&lt;/p&gt;

&lt;p&gt;They have all of this building blocks, what’s taking so long?&lt;/p&gt;

&lt;p&gt;Well, probably they’re afraid to touch anything because your product is a Jenga tower at this point. Try to move one brick and see all the other ones falling. Software development is not a sprint - it’s more of a marathon. Clean code helps you keep running at steady pace instead of bursting out sprint and then not being able to finish at all.&lt;/p&gt;

&lt;p&gt;Now, let's take a look at a real example of a business project that aims to gain new clients. A few weeks ago, we totally changed our website. Of course, it is fitted with a custom admin panel, and developed with RoR. Our team cared about clean code during the development process. Result? The new website is SEO optimized, mobile and user friendly. We already see that users spend more time on it, the traffic is increasing, and it will be much easier to maintain and develop it in the future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=GObGIlsQAbw" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.railwaymen.org%2Fhubfs%2FRailwaymen%2520About%2520Us.png" alt="RWMnewwebsite"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we know what’s in clean code for the business let’s see how the boy scouts rule can help you achieve it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Always leave the campground cleaner than you found it
&lt;/h2&gt;

&lt;p&gt;See, no-one - literally no-one - writes perfect code at the first try. That’s because the perfect code does not exist. You can’t take a peak into the future of the project and know which business decision your management will take and what tradeoffs you will have to make. That’s why writing clean code is a continuous effort.&lt;/p&gt;

&lt;p&gt;Whenever you estimate a task take a moment and look into the code you will have to deal with. Then, include the little refactor you will have to do in the task. &lt;a href="https://www.youtube.com/watch?v=xCGu5Z_vaps" rel="noopener noreferrer"&gt;It shouldn’t be a big rewrite.&lt;/a&gt; Small things really matter.&lt;/p&gt;

&lt;p&gt;Extract a method every now and then. Maybe improve variable naming? Perhaps, you can extract this little functionality into its own object and inject it as a collaborator to loose up some coupling? There are many small things that can improve the code dramatically over the time.&lt;/p&gt;

&lt;p&gt;Of course, that doesn’t mean that you should not care about your first try. You should always write your best code, but you definitely should keep in mind that not so long from now you will have to extend it or change it to make a business decision happen. I guess, it really just boils down to the one question:&lt;/p&gt;

&lt;h2&gt;
  
  
  How to write clean code in Ruby?
&lt;/h2&gt;

&lt;p&gt;The clean code is a code you won’t be afraid to change. You shouldn’t fear your own creation. To make that happen, care about your test suite. There are many fantastic resources on how to &lt;a href="https://thoughtbot.com/blog/tags/testing" rel="noopener noreferrer"&gt;write good tests&lt;/a&gt;, but the most important tip for me was: do not DRY your tests too much.&lt;/p&gt;

&lt;p&gt;You know this specs, where you open the file, there’s 20 let statements at the top, specs are one line each and all the setup is done in the before callback? I’m sure you’ve seen them and I’m sure you wrote some of them. I know, because I started exactly the same - chasing the wild goose of DRY-ing my specs to the limits. Now, reflect a little and ask yourself a question - are DRY-ed up specs REALLY more readable and comfortable to work with than more lines but of plain ruby? If you would inherit a project and try to figure how things work, would you rather have a longer spec, but more clear, than a shorter one, but confusing?&lt;/p&gt;

&lt;p&gt;I guess we let the code speak for itself here.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RSpec.describe ExampleImportService do
  let(:user_to_update_hash) { { email: "test@example.com", first_name: "Jane", last_name: "Doe" } }
  let(:new_user_hash) { { email: "test2@example.com", first_name: "Jack", last_name: "Doe" } }
  let(:mock_csv_string) { instance_double(String) }

  before do
    create(:user, email: "test@example.com", first_name: "John", last_name: "Doe")
    allow(File).to receive(:read).and_return(mock_csv_string)
    allow(CSV).to receive(:parse)
      .with(mock_csv_string, headers: true)
      .and_return([new_user_hash, user_to_update_hash])
    subject.call
  end

  describe "#call" do
    it "creates new user" do
      expect(User.find_by(email: "test2@example.com")).to be_present
    end

    it "updates existing user" do
      expect(User.find_by(email: "test@example.com").first_name).to eq("Jane")
    end
  end

  # You could instead write:

  describe "#call" do
    def mock_import(import_data)
      mock_csv_string = instance_double(String)
      allow(File).to receive(:read).and_return(mock_csv_string)
      allow(CSV).to receive(:parse)
        .with(mock_csv_string, headers: true)
        .and_return(import_data)
    end

    it "creates new user" do
      new_user_hash = {
        email: "test2@example.com",
        first_name: "Jack",
        last_name: "Doe"
      }
      service = described_class.new

      mock_import([new_user_hash])
      service.call

      new_user = User.find_by(email: "test2@example.com")
      expect(new_user).to be_present
    end

    it "updates existing user" do
      create(:user, email: "test@example.com", first_name: "John", last_name: "Doe")
      user_to_update_hash = {
        email: "test@example.com",
        first_name: "Jane",
        last_name: "Doe"
      }
      service = described_class.new

      mock_import([user_to_update_hash])
      service.call

      updated_user = User.find_by(email: "test@example.com")
      expect(updated_user.first_name).to eq("Jane")
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to test cleanness of your Ruby code?
&lt;/h2&gt;

&lt;p&gt;The chances are you’re now staring at the code example above. As you can see, the spec is rather long and there are many things going on. This isn’t necessarily a bad thing, you see. All those objects and mocks where there before (pun intended) - you just have them hidden behind all this RSpec DSL magic. One thing that immediately catches my eye when I’m reading the specs is the amount of setup needed. I don’t mean only the objects, I specifically mean the mocks.&lt;/p&gt;

&lt;p&gt;The amount of mocks(allow/expect to receive) is the best sign of the extensibility level of your code. How many objects or classes does your test subject reach for to deliver the end result? Where does this data come from? Is there a HTTP call to the third party API? Why you had no other choice but to mock all of this?&lt;/p&gt;

&lt;p&gt;Whenever you find yourself in the need of mocking an object in your spec there’s a chance that you just found your test subject’s collaborator. Collaborator is an object or a class that your subject reaches to get some work done. Common example is third party client, but also things from the rails world like mailers, loggers or even database. Having multiple collaborators is nothing to be ashamed of. The key concept is - can you swap them around? How coupled is your object to its own collaborators?&lt;/p&gt;

&lt;p&gt;If you find yourself in the sea of mocks, there’s quite a chance that you’re lacking dependency injection. Dependency injection, put in simple words, is a way to provide collaborators to your object from the outside. It’s easily the most useful thing I learnt on my way. Once you start extracting your collaborators you will find yourself in the possession of many building blocks, like legos.&lt;/p&gt;

&lt;p&gt;Then, whenever you’re asked to extend your functionality or add a new one based on it you already have a set of independent objects that you can pick from to build it. Also, you’re specs will look a lot better since you will be able to just inject a testing collaborator into your spec. Why would you mock call to third party API when you can inject collaborator with same interface which will just return a hash? Sure, you can record a cassette with VCR, but is it more readable and extensible than modifying a plain ruby hash? I hardly think so.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; RSpec.describe ExampleImportService do
  let(:user_to_update_hash) { { email: "test@example.com", first_name: "Jane", last_name: "Doe" } }
  let(:new_user_hash) { { email: "test2@example.com", first_name: "Jack", last_name: "Doe" } }
  let(:source) { TestSource.new(users: [user_to_update, new_user]) }

  subject { described_class.new(source: source) }

  before do
    create(:user, email: "test@example.com", first_name: "John", last_name: "Doe")
    subject.call
  end

  describe "#call" do
    it "creates new user" do
      expect(User.find_by(email: "test2@example.com")).to be_present
    end

    it "updates existing user" do
      expect(User.find_by(email: "test@example.com").first_name).to eq("Jane")
    end
  end

  # You could instead write:

  describe "#call" do
    it "creates new user" do
      new_user_hash = {
        email: "test2@example.com",
        first_name: "Jack",
        last_name: "Doe"
      }
      source = TestSource.new(users: [new_user_hash])
      service = described_class.new(source: source)

      service.call

      new_user = User.find_by(email: "test2@example.com")
      expect(new_user).to be_present
    end

    it "updates existing user" do
      create(:user, email: "test@example.com", first_name: "John", last_name: "Doe")
      user_to_update_hash = {
        email: "test@example.com",
        first_name: "Jane",
        last_name: "Doe"
      }
      source = TestSource.new(users: [user_to_update_hash])
      service = described_class.new(source: source)

      service.call

      updated_user = User.find_by(email: "test@example.com")
      expect(updated_user.first_name).to eq("Jane")
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The tests that keep on giving
&lt;/h2&gt;

&lt;p&gt;The tests are really the best place to spot troubles in your architecture. After all, they illustrate how to use the code you just wrote. That’s why they should be as simple and easy to follow as possible. The amount of warnings and information they can give you just goes on and on. What if you extracted your collaborators, but your setup is still pretty long because your method takes 6 parameters? Might be a sign of primitive obsession.&lt;/p&gt;

&lt;p&gt;What if you have multiple contexts checking same scenario but with different kind of values (arrays, hashes, numbers, strings, nils - you name it)? And, worst of all, those checks are nearly in every spec you make? That’s a sign you lack data validation/coercion at system boundary. The list goes on and on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;There is only one thing I’d like you to take away from this article. Writing clean code is a continuous effort. It doesn’t happen at first try, it doesn’t happen overnight. It’s hard to sell to business people, but yet the benefits of it are obvious when they come out. Remember the boy scout rule and do your best to leave your code in better state than the one you found it in. Even if git blame doesn’t point on you yet :).&lt;/p&gt;

&lt;p&gt;If you feel that writing a clean code in Ruby on Rails comes easily to you, check our open job positions. It may be a person, we are looking for!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://railwaymen.org/careers" rel="noopener noreferrer"&gt;Join our Ruby on Rails Development Team Here!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The article was originally published &lt;a href="https://blog.railwaymen.org/how-to-write-a-clean-code-in-ruby-on-rails" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Check our &lt;a href="https://blog.railwaymen.org/" rel="noopener noreferrer"&gt;Railwaymen blog&lt;/a&gt; to get more resources like that!&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Choose the Best Tools For QA Software Testing?</title>
      <dc:creator>Iza Rokita</dc:creator>
      <pubDate>Tue, 16 Jun 2020 12:19:13 +0000</pubDate>
      <link>https://dev.to/railwaymen/how-to-choose-the-best-tools-for-qa-software-testing-6ia</link>
      <guid>https://dev.to/railwaymen/how-to-choose-the-best-tools-for-qa-software-testing-6ia</guid>
      <description>&lt;p&gt;Everyone who wants to do their job well faces the basic challenge of preparing and organizing a workplace for himself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dkgP_Srh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/80l8gikyiceii0wwh2rl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dkgP_Srh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/80l8gikyiceii0wwh2rl.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am a beginner tester, but from the very beginning of my Quality Assurance Tester journey I had to answer the basic question “how?” and “in what way?” will I perform my tasks. A Manual Tester work is often perceived as monotonous and tedious, consisting mostly of clicking repeatedly. In the article below I will try to show you how to make it your dream work instead and how to organize it well with the help of the proper tools!&lt;/p&gt;

&lt;h3&gt;
  
  
  Why have I decided to become a tester?
&lt;/h3&gt;

&lt;p&gt;As I mentioned earlier, the work of the QA specialist may seem to be boring. But it’s just an illusion! It allows me to work with the newest technologies and learn about solutions that I had no idea that exists before. Besides, working in a software house &lt;a href="//railwaymen.org"&gt;such as Railwaymen&lt;/a&gt; allows you to participate in many different projects and experience various app development fields and industries. All this combined gives the satisfaction of being a valuable team member and doing things that others truly need to develop a fully functional app to the client. You just can't get bored in this job!&lt;/p&gt;

&lt;p&gt;In the article below I will describe the types of necessary and useful tools for manual testing, I will review them and tell you, which ones I use and value the most.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is important when looking for the best tools for QA?
&lt;/h3&gt;

&lt;p&gt;At the very beginning, we need to think about how does the day of the ordinary manual tester looks like. What kind issues and problems does he face everyday? To understand them better, we should distinguish the types of manual testing first. On the Test Levels, we can name Integration Testing, System Testing, and Acceptance Testing. &lt;/p&gt;

&lt;p&gt;When we’re going deeper we can distinguish the Tests Types:&lt;/p&gt;

&lt;p&gt;Functional Testing&lt;br&gt;
Non-functional Testing&lt;br&gt;
White-box Testing&lt;br&gt;
Black-box Testing&lt;br&gt;
Change-related Testing&lt;/p&gt;

&lt;p&gt;For example, you want to conduct an Integration Testing procedure for your app. It can be checking out if your app is cooperating properly with some external parties, &lt;a href="https://blog.railwaymen.org/a-complete-apple-pay-integration-tutorial-how-to-do-it-right"&gt;like Apple Pay&lt;/a&gt;. Then with the help of the different test types listed above, you can check different matters connected with this Integration. Functional tests will check if the payment is going smoothly, non-functional tests will validate the process performance, etc. Yet this matter is broad enough for the separate article, so we won’t focus on it too much here.&lt;/p&gt;

&lt;p&gt;So when you are looking for some tools for QA make sure, that you have the set that enables you to perform all of the test types listed above. Of course, everything described in this section depends strongly on the type of software or device being tested, the specifics of the team's work, and the development process requirements.&lt;/p&gt;

&lt;p&gt;If you don't have the time to look for the right set of tools by yourself - remember, that when you decide for the cooperation with the software house you usually have the QA services include. Read more about the advantages of this solution in the article below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.railwaymen.org/freelancer-vs.-software-house-7-factors-you-need-to-take-into-consideration"&gt;Freelancer vs Software House - Which One to Choose?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In general, we can assume that each tester must plan and manage tests, write test scenarios, find and report errors, conduct tests and retest and generate reports reflecting test results.&lt;/p&gt;

&lt;p&gt;To improve the workflow of the above tasks, as a Quality Assurance specialist you will need:&lt;/p&gt;

&lt;p&gt;Test management tools&lt;br&gt;
Tools for tests organization and test preparation&lt;br&gt;
Tools to performing tests and validating them&lt;br&gt;
Tools to bugs reporting&lt;br&gt;
 I will try to introduce the characteristics and give examples for each of the tools types listed above.&lt;/p&gt;

&lt;h2&gt;
  
  
  #1 Test management tools
&lt;/h2&gt;

&lt;p&gt;Most projects are managed through task managers such as Jira, Trello, Nifty, LiquidPlannerGetApp, or Monday.com. It is much easier to plan and control work on the project through those task managers. As a tester and team member, the ability to use this type of tool is crucial.&lt;/p&gt;

&lt;p&gt;To efficiently manage tests, a similar system to those listed above is useful. It is best if this tool could be integrated with the task manager. There are many test managers on the market, here are some more popular ones:&lt;/p&gt;

&lt;p&gt;Zephyr&lt;br&gt;
Test Rail&lt;br&gt;
Xray&lt;br&gt;
Test FLO&lt;br&gt;
PractiTest&lt;br&gt;
qTest&lt;br&gt;
TestLink&lt;br&gt;
Test Collab&lt;br&gt;
Testpad&lt;br&gt;
TestMonitor&lt;/p&gt;

&lt;p&gt;As you can see the list is quite large and that's not all of the test management tools. When choosing the test manager to your project explicitly, you should look inside for the basic functionalities that the test manager should have: &lt;/p&gt;

&lt;p&gt;Test Plans creation&lt;br&gt;
Test Cases creation&lt;br&gt;
Test Cases execution&lt;br&gt;
Reporting system&lt;br&gt;
Defect tracking system&lt;br&gt;
Integration with other tools&lt;/p&gt;

&lt;h2&gt;
  
  
  #2 Tools for tests organization and test preparation
&lt;/h2&gt;

&lt;p&gt;To run tests efficiently you need to prepare them in advance. No preparation for tests may cause their wrong execution and interpretation in the future. Appropriate test data must be prepared for planned tests. And here we have help in tools such as:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Data generator
&lt;/h3&gt;

&lt;p&gt;The program allows to generate CSV, XLSX, HTML, JSON, LDIF, SQL, XML files with previously specified data. Examples: generatedata.com and Mockaroo.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The E-mail Addresses generator
&lt;/h3&gt;

&lt;p&gt;To generate test e-mail accounts, you can use services such as 10 Minute Email, Mailinator or YOPmail, &lt;/p&gt;

&lt;p&gt;You can also use the trick provided by the Gmail account. Where if you add + after the username you will be able to enter any string. For example, for the &lt;a href="mailto:test@gmail.com"&gt;test@gmail.com&lt;/a&gt; account, we can create several accounts using the + sign (e.g. &lt;a href="mailto:test+1@gmail.com"&gt;test+1@gmail.com&lt;/a&gt;, &lt;a href="mailto:test+test1@gmail.com"&gt;test+test1@gmail.com&lt;/a&gt;), all emails will be handled by the &lt;a href="mailto:test@gmail.com"&gt;test@gmail.com&lt;/a&gt; mailbox.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Text generator
&lt;/h3&gt;

&lt;p&gt;When conducting tests, there is often a need to fill in a field or send a message with a set number of characters. For these purposes, we can use text generators where we can get the text with a set number of characters such as this one or this one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learn.railwaymen.org/newsletter"&gt;Sign up to our Railwaymen Newsletter!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To check the number of characters, you should also use the character counter like this one. Google document also provides a pretty good character counter.   &lt;/p&gt;

&lt;h3&gt;
  
  
  4. File generator JPG, PDF, PNG, DOCX
&lt;/h3&gt;

&lt;p&gt;Similarly as with the text generator, we also need a file generator, that will create for us the files of the certain size. A perfect tool for this task will be this one. In QA, the same data set is being repeatedly used for tests, retests, and regression tests very often. That is why it is worth devoting more time to prepare it right.&lt;/p&gt;

&lt;h2&gt;
  
  
  #3 Tools for performing tests and validating them
&lt;/h2&gt;

&lt;p&gt;Performing tests without the use of any tools would be unreliable. While testing by clicking, we can very effectively avoid irregularities in the application. But without their thorough examination, it is difficult to undisputedly define or check the bug itself. It is also more difficult to describe and report that bug later. Reporting bug as “something is not working”, is useless ;)&lt;/p&gt;

&lt;p&gt;Here are some tools that will facilitate the manual testing process:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Charles
&lt;/h3&gt;

&lt;p&gt;This is one of the more useful tools during testing but I will tell you why this is so later.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Postman
&lt;/h3&gt;

&lt;p&gt;A useful tool for testing the API, and responses that have been returned from the server. Postman also enables writing API tests in JavaScript and query parameterization. It is often useful when it is not possible to test a given area because the graphical interface of the module depending on it is not available.&lt;/p&gt;

&lt;p&gt;For example, if we need to test the module for accepting orders but at the moment it is, not possible to do so through the graphical interface. In this kind of situations, Postman can save us. With the right request, we can quickly create the necessary orders and continue testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Jmeter
&lt;/h3&gt;

&lt;p&gt;An open-source software, designed for testing test performance Web Applications. It can be used to analyze overall performance under different load types. Jmeter allows you to schedule tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Developers tools in the Internet Browsers
&lt;/h3&gt;

&lt;p&gt;Currently, browsers such as Chrome, Firefox, have developers tools that allow you to edit websites, and quickly diagnose problems. When you are testing, look at tabs such as:&lt;/p&gt;

&lt;p&gt;Style - contains the styles used on the page&lt;br&gt;
Console - monitors the website work&lt;br&gt;
Network - monitors website communication&lt;br&gt;
Elements - shows the current display items&lt;br&gt;
Besides, browsers can inspect a specific element, and enable you to check the mobile version by simulating a change in your screen resolution.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Phone/devices simulator &amp;amp; emulator
&lt;/h3&gt;

&lt;p&gt;When we are testing mobile applications or mobile version of the websites, we often have a limited selection of the real, physical testing devices. Simulators and emulators are a simple way to extend your testing range.&lt;/p&gt;

&lt;p&gt;To simulate phones behaviors, it's probably the easiest to use the tools provided by:&lt;br&gt;
Android Studio&lt;br&gt;
XCode&lt;br&gt;
Browserstack&lt;br&gt;
Sometimes it can be problematic to set them up. Then the best way is to get help from developers who work on tested software.&lt;/p&gt;

&lt;h2&gt;
  
  
  #4 Tools to Bugs reporting
&lt;/h2&gt;

&lt;p&gt;To make our work useful to the development team, we are expected to report and describe all of the bugs and problems that we find as detailed and efficiently as possible. Appropriately described screenshots, pasted fragments of responses from the server can help understand the issue by the team much deeper.&lt;/p&gt;

&lt;p&gt;For this purpose, we can use tools like:&lt;/p&gt;

&lt;p&gt;Screen recorder/ screenshot&lt;br&gt;
Service to formatting the code and getting links like Pastebin&lt;br&gt;
Client to send files between devices. I like Snapdrop (I’m lovin’ it ;))&lt;br&gt;
Additional simple tools that may be obvious but worth mentioning here.&lt;/p&gt;

&lt;p&gt;Mouse Pointer, and touch viewer &lt;br&gt;
Color Picker&lt;br&gt;
A simple text editor like Notepad++ &lt;br&gt;
Digital Ruler &lt;br&gt;
Cloud - to store the file&lt;br&gt;
Screen mirroring &lt;/p&gt;

&lt;p&gt;The described selection of tools is mainly based on the tester's work on mobile and web applications, but If you have to test other things - the above set of tools may be useful as well.&lt;/p&gt;

&lt;p&gt;For now, I've mainly just listed the tools worth using. For most of them, it will be good to devote a separate chapter or series of articles, to describe their exact use. Maybe it will happen soon, let me know in the comment section if this something you would like to read ;)&lt;/p&gt;

&lt;h3&gt;
  
  
  What are the best tools for manual testing?
&lt;/h3&gt;

&lt;p&gt;The number of available tools that can help us work more efficiently as a manual testers is huge. It's hard to imagine using them all at once while working. Too many tools that we don't know how to use can slow down our work. It's best to find the golden mean so that our work is the most effective.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fUMjKntp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zntkice5srowdb7f4jvn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fUMjKntp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zntkice5srowdb7f4jvn.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I think that such basic tools that will be useful during manual tests are:&lt;/p&gt;

&lt;p&gt;A tool for monitoring the communication of services with the server (for example Charles proxy)&lt;br&gt;
Layout inspection tools (for example Chrome Inspect tool)&lt;br&gt;
A tool for taking screen recordings and taking screenshots (for example Chrome Inspect tool )&lt;br&gt;
Simple graphics editor to describe errors in the layout( for example Bandicam) &lt;br&gt;
Client for transferring files between devices (for example Snapdrop)&lt;br&gt;
Test management tool (JIRA with Xray)&lt;/p&gt;

&lt;h3&gt;
  
  
  Which is the best software testing tool for App Development?
&lt;/h3&gt;

&lt;p&gt;There are many tools that I use in my work, I also try to check new products and look for new solutions that will allow me to improve the quality of testing. However, there is a tool that I use almost everyday, and to which I often go back to verify the problem I found. This program is a Charles proxy tool, and its aim is to monitor the application communication with the server. &lt;/p&gt;

&lt;p&gt;This very simple program works on Mac, Windows, Linux, iOS Android platforms. It allows to conduct the interception of queries and responses between servers and applications. By exchanging responses from the server, it allows the application to trigger behaviors (e.g. specified error communication) that would be difficult to obtain within the normal use of the application. I value this program the most because it has allowed me to observe and define incorrect operation more than once which would be difficult or impossible to track by only clicking on the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;There is a lot of software on the market that facilitates the work of the tester and the entire team when creating custom software. Most of these tools are paid and the possibility of using them depends on your teams budget as well. It's good to know some of the tools listed above that you can use on your own. It is also good to know what kind of tools are available on the market, to propose and use them when the project requires them. It often happens, that the characteristic of the project does not allow the use a certain tool. Over time, you must learn have to adjust the tools to the specific project. For example: it is not profitable to run and configure some complex tools when we have a very limited amount of time for the whole app development.&lt;/p&gt;

&lt;p&gt;I think that over time everyone develops their set of tools that they use in their everyday work. I hope that the information collected in this article will help you in choosing the one that will be suited for you. Yes, the tester's work is based on constant search and thinking about how to check something. Remember that the skilful and optimal use of testing tools not only improves the work but above all - increases your whole quality of testing!&lt;/p&gt;

&lt;p&gt;Software development world is filled with tools that we use to make our everyday work as efficient as possible. Interested what kind of them are most suited for project managers? Check this piece below, where we are giving our real-life examples!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.railwaymen.org/tools-to-knock-out-agile-project-management"&gt;Tools to Knock Out Agile Project Management&lt;/a&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Asynchronous Programming With Swift - Introduction to Combine</title>
      <dc:creator>Iza Rokita</dc:creator>
      <pubDate>Tue, 09 Jun 2020 12:47:51 +0000</pubDate>
      <link>https://dev.to/railwaymen/asynchronous-programming-with-swift-introduction-to-combine-4f3g</link>
      <guid>https://dev.to/railwaymen/asynchronous-programming-with-swift-introduction-to-combine-4f3g</guid>
      <description>&lt;p&gt;As iOS developers we have to track what is new in the iOS platform. All developers want to deliver the best designed application in code and design. Each year Apple as an owner of the platform prepares WWDC. Last year at the &lt;a href="https://developer.apple.com/videos/wwdc2019/" rel="noopener noreferrer"&gt;Worldwide Developer Conference 2019&lt;/a&gt; Apple introduced many new things that all developers should know, especially Combine and SwiftUI. Today I would like to focus on the Combine framework.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxxvy6wc1ayn0h9fsg72s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxxvy6wc1ayn0h9fsg72s.jpg" alt="Asynchronous Programming with Swift"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First time I met with Combine… of course while watching WWDC 2019, trying to catch up with all new things, all new features that Apple has provided for developers. Trying to do some coding with Combine just reading through Apple’s documentation and tutorials can be painful, so I decided to use our in-company training system to buy one of the books. I chose Combine: Asynchronous Programming with Swift from Raywenderlich by Scoot Gardner, Shai Mishali, Florent Pillet and Marin Todorov.&lt;/p&gt;

&lt;p&gt;Before jumping into the Combine world, I have to explain where reactive programming comes from. All reactive solutions came from Microsoft library Rx.NET, Reactive Extensions for .NET. Since Microsoft distributed the code an open-source community started to implement flavours for other languages. From Rx.NET we can read that currently, flavours of RX based on Microsoft solution are available for other languages language - RxJS (JavaScript), RxJava (Java), RxScala (Scala), RxCpp (C++), Rx.rb (Ruby), RxPy (Python 3).&lt;/p&gt;

&lt;p&gt;Before the Apple solution (Combine), the iOS community introduced frameworks such as ReactiveSwift and RxSwift to make code more readable, easy to use and easy to maintain. &lt;/p&gt;

&lt;h2&gt;
  
  
  What are ways to achieve asynchronous programming on iOS?
&lt;/h2&gt;

&lt;p&gt;On the iOS platform, developers have various possibilities to do the coding asynchronously. Apple over the years improved their APIs to help to achieve it. Here programmers decide what kind of mechanism they will use to achieve the expected result. Developers use asynchronous ways of programming e.g. for network connections, data calculations etc. Platforms give us as developers ways to achieve asynchronous using e.g.:&lt;/p&gt;

&lt;p&gt;Notification Center&lt;br&gt;
Grand Central Dispatch&lt;br&gt;
Operations&lt;br&gt;
Closures callbacks&lt;br&gt;
Delegates&lt;br&gt;
Timers&lt;/p&gt;

&lt;p&gt;OK, but for what kind of reason do we need an extra library in our ecosystem if we already have a solution to write the code...?&lt;/p&gt;
&lt;h2&gt;
  
  
  What is Combine? 
&lt;/h2&gt;

&lt;p&gt;As I mentioned before Combine is the framework introduced by Apple on WWDC 2019 as an Apple’s Swift solution for reactive programming. In Apple Developer Combine documentation we can read that adopting Combine makes code easier to read and maintain, by centralizing your event-processing code. Using one solution over the application will eliminate different techniques of handling asynchronous programming such as nested closures, delegates, etc. &lt;/p&gt;

&lt;p&gt;The solution introduced by Apple has its own limitations. Since Apple created and introduced the world new solution for reactive streams they declared framework to be compatible only with these systems: &lt;/p&gt;

&lt;p&gt;iOS 13.0 and newer&lt;br&gt;
macOS 10.15 and newer&lt;br&gt;
Mac Catalyst 13.0 and newer&lt;br&gt;
tvOS 13.0 and newer&lt;br&gt;
watchOS 6.0 and newer&lt;/p&gt;

&lt;p&gt;This is a big limitation because if we decide to create applications with Combine we cannot release applications for devices with older systems. But if we look into statistics provided by Apple measured in App Store from 27 January 2020 we can read that the current adaptation of iOS 13 on devices introduced in the last 4 years is around 77% and 70% on all devices. On the iPad devices introduced in the last 4 years are 79% and 57% on all devices. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.railwaymen.org%2Fhs-fs%2Fhubfs%2Fasynchronous%2520programming%2520with%2520swift%25201.png%3Fwidth%3D350%26name%3Dasynchronous%2520programming%2520with%2520swift%25201.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.railwaymen.org%2Fhs-fs%2Fhubfs%2Fasynchronous%2520programming%2520with%2520swift%25201.png%3Fwidth%3D350%26name%3Dasynchronous%2520programming%2520with%2520swift%25201.png" alt="Combine"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adaptation of iOS 13 measured by App Store on January 27, 2020.&lt;/p&gt;
&lt;h2&gt;
  
  
  Basics of Combine
&lt;/h2&gt;

&lt;p&gt;In Combine, we can point to the main pieces - publishers and subscribers. Publisher is a protocol which declares that a type can transmit a sequence of values over time, while Subscriber is the protocol that declares a type that can receive input from a publisher. &lt;/p&gt;
&lt;h3&gt;
  
  
  Publisher
&lt;/h3&gt;

&lt;p&gt;Publisher is a type that emits values over time to elements such as subscribers. A publisher can emit zero or more output values. Here is an important thing, if the publisher received success or a failure, it will not emit any other events. Publisher contains two associated types. Output and Failure. Output declares what kind of type we have to expect on stream output as success. If it is declared as String, we are not able to emit any different data type. Failure declares what kind of type we have to expect to be thrown by the publisher if it fails. Here if you are sure that the publisher will never throw any error, we can declare as Never type. &lt;/p&gt;

&lt;p&gt;Apple provided few already implemented publishers such as: &lt;/p&gt;

&lt;p&gt;AnyPublisher - a publisher that performs type erasure by wrapping other publisher&lt;br&gt;
Future - A publisher that eventually produces a single value and then finishes or fails &lt;br&gt;
Just - A publisher that emits an output to each subscriber just once, and the finishes&lt;br&gt;
Deferred - A publisher that waits subscription before running the supplied closure to create a publisher for the new subscriber&lt;br&gt;
Empty - a publisher that never publishes any values, and optionally finishes immediately &lt;br&gt;
Fail - A publisher that immediately terminates with the specified error&lt;br&gt;
Record - A publisher that allows for recording a series of inputs and a completion, for later playback to each subscriber&lt;/p&gt;
&lt;h3&gt;
  
  
  Operators
&lt;/h3&gt;

&lt;p&gt;Operators are specially designed methods which are called on publisher instance. As a return value from the operator, we can get the same publisher or a different one. With the help of operators, we can manage data, catch errors, and replace values if necessary. Due to operators we can in a few lines e.g. receive responses from the server, get Data from the response, decode JSON to our model, filter out, zip or even remove unnecessary values and so on.  &lt;/p&gt;

&lt;p&gt;Most of the operators will look almost the same as those which we know from Swift to do sth on collections. To check what kind of operators are available please check Publisher documentation.&lt;/p&gt;
&lt;h3&gt;
  
  
  Subscriber
&lt;/h3&gt;

&lt;p&gt;Subscriber is a type that receives a stream from a Publisher, completion or failure events. Subscriber also contains two associated types. In this case is Input and Failure. Subscriber’s Input and Failure must match the Output and Failure of its corresponding publisher.&lt;/p&gt;
&lt;h2&gt;
  
  
  Combine pros and cons
&lt;/h2&gt;

&lt;p&gt;Combine introduced by Apple is a new reactive framework for processing asynchronous events over time with Swift which can be helpful in the process of application development. Before taking Combine and throwing it to our applications we have to take into consideration a few things.&lt;/p&gt;

&lt;p&gt;First, we have to think about the users. Apple gave restrictions in using Combine, requires iOS 13 or above. It means if we want to use it in our production code we will have to stop supporting applications on previous versions. &lt;/p&gt;

&lt;p&gt;Second, we have to think about our coworkers. Reactive programming is not easy to understand for less experienced developers. The way of programming has to be changed to compare with the “normal” programming on iOS with Swift. It requires days or even months to get used to using it and reach knowledge.&lt;/p&gt;

&lt;p&gt;Of course, besides these two things which can cause some problems in using Apple’s framework, there are few pros that I have to mention. &lt;/p&gt;

&lt;p&gt;Combine does not require us to rewrite the whole code to use it. It can be used only in the places where we’re decided that reactive programming will speed up and will simplify complex code. &lt;br&gt;
Combine is Apple’s framework. It means that the community around it will grow immediately, there will be more tutorials, more books, more topics conferences and more questions on StackOverflow about it… Already looking for some more Apple tutorials? Here we have two, that you may like:&lt;/p&gt;

&lt;p&gt;And the last thing. Combination of SwiftUI and Combine can decrease the complexity of the application, so it means it will decrease hours spent over the code. SwiftUI has those same requirements as Combine, it requires iOS 13 or newer. &lt;/p&gt;
&lt;h2&gt;
  
  
  Combine Code Examples 
&lt;/h2&gt;

&lt;p&gt;Importing Combine into the project gives us many already created publishers. In examples, I will show how you can combine Combine in daily cases. I will focus on NotificationCenter and here we will use the sink method. Later we will focus on an easy Timer with assign method, you will see how fast and easy update your model. And at least I will provide some sample code for API connection and decoding JSON. &lt;/p&gt;

&lt;p&gt;Example of Publisher - NotificationCenter&lt;/p&gt;

&lt;p&gt;Here is an example of creating a publisher from NotificationCenter. The publisher is a type of NotificationCenter.Publisher.&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let notificationCenter = NotificationCenter.default
// 1 - Create test notification
let testNotification = Notification.Name("Test Notification")

// 2 - Create publisher from default notification center
let publisher = notificationCenter.publisher(for: testNotification, object: nil)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now instead of creating an observer we will create a subscription. Here is a good example of how to use a sink method.&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// 3 - Create subscription from publisher
let subscription = publisher
  .sink(receiveValue: { notification in
    print("Test Notification received from the publisher")
})

// 4 - Post notification
notificationCenter.post(name: testNotification, object: nil)

// 5 - Cancel subscription
subscription.cancel()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Timer implementation with combine&lt;/p&gt;

&lt;p&gt;Ok, it’s time for everyone to know about Timer. Each of the developers has to know how to deal with timers in the Apple environment. First, we need some kind of model. In this case, I created a simple MyObject class with property updateAt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MyObject {
    var updatedAt: Date = Date()
}

let myObject = MyObject()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s assume this model pretends to be a model responsible for keeping data about a conversation between two users. You have been asked to refresh the status of the conversation each 5 sec. Here we go:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Create Timer publisher
// automatically connect to timer publisher
// Update data model using key path
let cancellable = Timer.publish(every: 5, on: .main, in: .default)
    .autoconnect()
    .assign(to: \.updatedAt, on: myObject)

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

&lt;/div&gt;



&lt;p&gt;That's all. In the first line, you're creating an AnyCancellable publisher. In the second line, you’re requesting to auto-connect to the publisher. And in the last line your assigning retrieved date to updateAt property in our sample object. If you need to cancel subscription your just calling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Cancel subscription if needed
cancellable.cancel()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An AnyCancellable instance automatically calls cancel() when deinitialized. API request and JSON decoding Ok, now is time to use combine to receive response from the server. First, we need a declared structure which will be representing our JSON data. Here we will use Decodable protocol. For more information about Encoding and Decoding Custom Types you can read from Apple documentation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;struct Item: Decodable {
  let id: UUID
  let value: String
  let createdAt: Date
  let updateAt: Date
  }

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

&lt;/div&gt;



&lt;p&gt;Now is time to create an APIClient class which will be responsible for creating requests and receiving responses from our REST server. In this example I provided a fake URL address for the server, but do not hesitate to replace it with yours.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class APIClient {
  private let decoder = JSONDecoder()
  private let url = URL(string: "https://www.example.com/api")!

  func getItem() -&amp;gt; AnyPublisher&amp;lt;item, error=""&amp;gt; {
    var request = URLRequest(url: url)
    request.allHTTPHeaderFields = [
      "Accept": "application/json",
      "Content-Type": "application/json"
    ]

    return URLSession.shared
      .dataTaskPublisher(for: request)
      .map(\.data)
      .decode(type: Item.self, decoder: decoder)
      .eraseToAnyPublisher()

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

&lt;/div&gt;



&lt;p&gt;Let’s focus on the “main” part of the code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    return URLSession.shared
      .dataTaskPublisher(for: request)
      .map(\.data)
      .decode(type: Item.self, decoder: decoder)
      .eraseToAnyPublisher()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see for URLSession Apple provides us method dataTaskPublisher(for:_) which wraps URL session data task with given URL request. By calling map(.data) we’re expecting Data type which we are decoding by previously created JSONDecoder. In the end we’re exposing an instance of AnyPublisher to the downstream subscriber. How to use it?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var subscriptions = Set()
let api = APIClient()

api
  .getItem()
  .sink(receiveCompletion: { print($0) },
        receiveValue: { print("Received value \($0)")})
  .store(in: &amp;amp;subscriptions)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First we are declaring a Set of AnyCancellable and at the end we store a subscription using .store(in: &amp;amp;subscriptions). We have to store subscription, without keeping references the publisher will terminate immediately and subscription will be cancelled. &lt;/p&gt;

&lt;p&gt;By using the sink method we can handle completion and received value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;As you can see Combine is quite an interesting way of reactive programming which you can introduce to your development team, to your project. You may wonder why I had interested in Combine. The first reason is that reactive programming is on the top right now in many companies, teams are introducing RxSwift and ReactiveSwift to their project as a good way to speed up the development process. In both mentioned cases we are using third companies solutions which can also have some cons and pros. The second reason is that I watched WWDC 2019 each year from the start of my career as an iOS developer and I really wanted to try what Apple gave developers. &lt;/p&gt;

&lt;p&gt;Interested in other articles regarding Swift? Then you should definitely check out our Swift vs React Native article! Thanks to it, you will find out what are the advantages and advantages of both of this programming languages, to choose the best to learn OR use in your next mobile app project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.railwaymen.org/swift-vs-react-native-which-one-should-you-choose-to-build-your-mobile-app" rel="noopener noreferrer"&gt;You can read the Swift vs React Native article here!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sources: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.apple.com/documentation/combine" rel="noopener noreferrer"&gt;https://developer.apple.com/documentation/combine&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.apple.com/videos/wwdc2019/" rel="noopener noreferrer"&gt;https://developer.apple.com/videos/wwdc2019/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://store.raywenderlich.com/products/combine-asynchronous-programming-with-swift" rel="noopener noreferrer"&gt;https://store.raywenderlich.com/products/combine-asynchronous-programming-with-swift&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.raywenderlich.com/7864801-combine-getting-started" rel="noopener noreferrer"&gt;https://www.raywenderlich.com/7864801-combine-getting-started&lt;/a&gt;&lt;br&gt;
&lt;a href="http://reactivex.io" rel="noopener noreferrer"&gt;http://reactivex.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>swift</category>
      <category>ios</category>
    </item>
    <item>
      <title>How to Learn Ruby on Rails: 11 Ways to Become a Great Developer</title>
      <dc:creator>Iza Rokita</dc:creator>
      <pubDate>Thu, 21 May 2020 19:39:07 +0000</pubDate>
      <link>https://dev.to/railwaymen/how-to-learn-ruby-on-rails-11-ways-to-become-a-great-developer-2n06</link>
      <guid>https://dev.to/railwaymen/how-to-learn-ruby-on-rails-11-ways-to-become-a-great-developer-2n06</guid>
      <description>&lt;p&gt;Since the day of founding, Railwaymen is strongly related to the Ruby on Rails. Right now, &lt;a href="https://railwaymen.org/meet-the-team"&gt;we're hiring over 20 talented RoR Developers&lt;/a&gt;. Our +10 years of experience allow us to show you proven and effective ways to learn programming in Ruby on Rails. Although this framework was created in 2005, and some people may say, "It's not fresh anymore," we recognize it as a well-tested, stable, reliable and very available to people with different skill sets and experience in programming. With Ruby on Rails, you will create full-featured and object-oriented web applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oYn4kT5T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Lern-RoR-02-min-1.png%3Fwidth%3D1250%26name%3DLern-RoR-02-min-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oYn4kT5T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Lern-RoR-02-min-1.png%3Fwidth%3D1250%26name%3DLern-RoR-02-min-1.png" alt="how to learn ruby on rails"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are many ways to learn code nowadays. Online course or code school is probably your first idea of starting learning Ruby on Rails. I encourage you to explore all possibilities. The key to success is to choose the method that works for you. Luckily, this article brings you a complete guide about the most effective ways of learning programming in Ruby on Rails. You will find out many helpful sources of education that have been checked and recommended by our Ruby on Rails Developers. It's time to start your web development journey! Let's begin with a fundamental question.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is it worth paying attention to RoR?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.railwaymen.org/what-do-basecamp-github-and-twitch-have-in-common-they-are-top-notch-ruby-on-rails-examples"&gt;GitHub, Airbnb, Ask.fm, SlideShare, Zendesk, Groupon, Shopify&lt;/a&gt; are examples of large international companies that choose Ruby on Rails as a framework.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;High development speed allows to deliver projects effectively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There are almost &lt;a href="https://rubygems.org/stats"&gt;160k open-source libraries (gems)&lt;/a&gt;, and this number is growing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Right now, there are over &lt;a href="https://github.com/rails/rails"&gt;4 thousand contributors&lt;/a&gt; to the ROR's source code on GitHub. &lt;br&gt;
In 2019 Ruby has appeared in Stack Overflow's Developer Survey Results in the section &lt;a href="https://insights.stackoverflow.com/survey/2019#most-popular-technologies"&gt;"Most Popular Technologies."&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The same report positioned Ruby on 6 place in &lt;a href="https://insights.stackoverflow.com/survey/2019#top-paying-technologies"&gt;"Top Paying Technologies."&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There are over &lt;a href="https://trends.builtwith.com/websitelist/Ruby-on-Rails"&gt;470 thousand existing websites&lt;/a&gt; based on Ruby on Rails.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Employment websites show demand on RoR Developers and Engineers: Indeed.com almost 2k, Monster.com over 3,4k job offers.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Is it easy to learn Ruby on Rails?
&lt;/h3&gt;

&lt;p&gt;That is probably the most curious and common question for those who are considering to start learning Rails. The answer is yes, it is. Ruby on Rails is popular among beginners because it's recognized as one of the most easy-to-learn framework. Another significant advantage is the fact that Stack Overflow contains solutions for a vast number of issues. That means you are not left alone in the RoR web development world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p4xEH5XA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Damian-learn-ror-min.png%3Fwidth%3D1200%26name%3DDamian-learn-ror-min.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p4xEH5XA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Damian-learn-ror-min.png%3Fwidth%3D1200%26name%3DDamian-learn-ror-min.png" alt="how to learn ruby on rails Damian"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to learn HTML, CSS, JavaScript, or Ruby before Rails?
&lt;/h3&gt;

&lt;p&gt;What makes RoR unique is that it covers the front and back-end. It means you will become a Full-stack Developer. Nevertheless, we recommend you to get familiar with HTML, CSS, JavaScript first. Why? Those are technologies you need to learn to become a Front-end Developer. During the process of education, you will discover that using the front-end programming languages is necessary to master the beginner level of Rails. &lt;/p&gt;

&lt;p&gt;Web application framework Ruby on Rails is built with the Ruby programming language. Rails is strongly related to Ruby. So yes, knowledge of Ruby is extremely helpful to become RoR Developer, and we advise you to learn it before starting the education of Rails framework. The next stages of coding and learning of RoR will show you how useful is knowledge of Ruby.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to learn Ruby on Rails: 11 best ways
&lt;/h3&gt;

&lt;p&gt;Convinced to learn Ruby on Rails web development framework? Great! Let's find out the best method that suits your needs. The list below also includes sources that will allow you to stay up-to-date with Ruby on Rails news.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Stationary or online school:
&lt;/h2&gt;

&lt;p&gt;You can choose between stationary or online schools and different forms (daily, weekly, evening). It is up to you whether you prefer learning more traditionally or not. Stationary code schools are usually more expensive and located in larger cities, but being a member of the group of people with the same learning goals can be motivational. On the other hand, professional online schools are more available and comfortable. No doubt, they have become so popular recently. Many of stationary schools also have an online offer. The huge advantage of choosing code school is teacher's support. You will probably have questions about coding, so it’s nice to have someone who will give you a proper answer.  &lt;/p&gt;

&lt;p&gt;Before you sign up to code school, it's worth checking the rankings. You can find the ranking here: &lt;a href="https://www.switchup.org/rankings/best-coding-bootcamps"&gt;2020 Best Coding Bootcamps&lt;/a&gt; and &lt;a href="https://www.coursereport.com/best-coding-bootcamps"&gt;The 48 Best Coding Bootcamps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can find the Bootcamp in your area here: &lt;a href="https://www.coursereport.com/subjects/rails"&gt;Ruby on Rails Bootcamps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Is it better to graduate stationary or online code school?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f5hJHEue--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Iwona-learn-ror-min.png%3Fwidth%3D1200%26name%3DIwona-learn-ror-min.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f5hJHEue--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Iwona-learn-ror-min.png%3Fwidth%3D1200%26name%3DIwona-learn-ror-min.png" alt="ruby on rails how to learn"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Online Course
&lt;/h2&gt;

&lt;p&gt;Online courses are very popular because of the affordable price and the possibility to start learning immediately. Usually, courses share some free lessons, so you can check whether the tutor is charismatic and lessons are engaging. It is also a safe way to check if programming is for you. If you are thinking seriously about becoming a RoR Developer, we recommend you invest money and find a professional online course rather than looking for some free knowledge. The reason is simple. Paid courses give quality, and are regularly updated.&lt;/p&gt;

&lt;p&gt;Before you pick up a course, check this ranking: &lt;a href="https://www.creativebloq.com/web-design/online-coding-courses-11513890"&gt;The best online platforms for learning to code.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Online courses recommended by our Ruby on Rails Developers:&lt;/p&gt;

&lt;p&gt;Udemy: &lt;a href="https://www.udemy.com/course/professional-rails-5-development-course/"&gt;Dissecting Ruby on Rails 5 - Become a Professional Developer&lt;/a&gt;&lt;br&gt;
Udemy: &lt;a href="https://www.udemy.com/course/the-complete-ruby-on-rails-developer-course/"&gt;The Complete Ruby on Rails Developer Course&lt;/a&gt; &lt;br&gt;
LinkedIn Learning: &lt;a href="https://www.linkedin.com/learning/ruby-on-rails-5-essential-training/welcome"&gt;Ruby on Rails 5 Essential Training&lt;/a&gt;&lt;br&gt;
LinkedIn Learning: &lt;a href="https://www.linkedin.com/learning/ruby-on-rails-get-more-from-activerecord"&gt;Ruby on Rails: Get More From ActiveRecord&lt;/a&gt;&lt;br&gt;
LinkedIn Learning: &lt;a href="https://www.linkedin.com/learning/ruby-testing-with-rspec"&gt;Ruby: Testing with RSpec&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Books
&lt;/h2&gt;

&lt;p&gt;Our Ruby on Rails Developers still willingly pick up books, that's why our company library is full of great RoR titles. I understand that you may think that book quickly becomes outdated, but it is not entirely true. Although technology is rapidly changing, books ensure some fundamentals, best practices, and form the proper mindset of future RoR Ninja. &lt;/p&gt;

&lt;p&gt;Find out: &lt;a href="https://blog.railwaymen.org/8-ruby-on-rails-books-you-should-read-to-become-a-better-developer"&gt;8 Ruby on Rails Books You Should Read&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Community
&lt;/h2&gt;

&lt;p&gt;So many developers say that &lt;a href="https://rubyonrails.org/community/"&gt;community&lt;/a&gt; is a Ruby on Rails blessing. Right now, there are over 4k of contributors on Github. Joining the RoR society will be especially helpful while you'll face the code issues and bugs. One of the most important pieces of advice that we can give you is to use the benefits that the RoR community and StackOverflow content can offer you. &lt;/p&gt;

&lt;p&gt;Helpful links:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rubyonrails.org/"&gt;Ruby on Rails official site&lt;/a&gt;&lt;br&gt;
&lt;a href="https://discuss.rubyonrails.org/"&gt;Ruby on Rails Discussions&lt;/a&gt; &lt;br&gt;
&lt;a href="https://github.com/rails/rails"&gt;Rails Contributions on Github&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/tagged/ruby-on-rails"&gt;The Ruby on Rails StackOverflow Q&amp;amp;A tag&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.reddit.com/r/rails/"&gt;Reddit for Ruby on Rails enthusiasts&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.rubyonrails.link/"&gt;Community of Ruby on Rails developers on Slack&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Mentor
&lt;/h2&gt;

&lt;p&gt;Mentoring is one of the best methods to enter the IT world and become a developer. It can have a massive impact on the speed and quality of learning Rails. Usually, mentoring programs took about 3-4 months, during which a dedicated expert will describe the path of learning, check the progress, and give support. Unfortunately, getting into that kind of course is not so easy because of a high number of applicants.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P-rSpXmg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Karol-learn-ror-min.png%3Fwidth%3D1200%26name%3DKarol-learn-ror-min.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P-rSpXmg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Karol-learn-ror-min.png%3Fwidth%3D1200%26name%3DKarol-learn-ror-min.png" alt="how to learn ruby on rails"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When it comes to programming with Ruby on Rails, you can not skip Michael Hartl and his Ruby on Rails tutorials. Right now, most of his lessons are paid, but you can find some free chapters here: &lt;a href="https://www.railstutorial.org/book/"&gt;Ruby on Rails Tutorial&lt;/a&gt;. Michael Hartl gives full-stack knowledge in a comprehensive and accessible way.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Blogs
&lt;/h2&gt;

&lt;p&gt;Blogs are fantastic for discovering the news, looking for problem solutions, expanding skills, finding knowledge about web development, and coding tricks. Some blogs provide basic education for beginners, but learning how to code from scratch, through blog articles could be time-consuming. However, this is definitely an excellent solution for those who want to stay up-to-date with Ruby on Rails. &lt;/p&gt;

&lt;p&gt;Read about: &lt;a href="https://blog.railwaymen.org/10-ruby-on-rails-blogs-you-should-be-following"&gt;10 Ruby on Rails Blogs worth following&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Newsletters
&lt;/h2&gt;

&lt;p&gt;Newsletters are wonderful solutions for those who want to learn and stay up-to-date with RoR news but do not have time for searching the Internet. We all know that programming is growing and changing speedily. Subscribing to newsletters will give you a view on the latest information from Ruby on Rails world. Don't be afraid of sharing your email address. You can unsubscribe whenever you like.&lt;/p&gt;

&lt;p&gt;Here are some trustworthy sources:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rubyweekly.com/"&gt;Ruby Weekly&lt;/a&gt;&lt;br&gt;
&lt;a href="https://rails-weekly.ongoodbits.com/"&gt;This Week in Rails&lt;/a&gt;&lt;br&gt;
&lt;a href="https://learn.railwaymen.org/newsletter"&gt;Railwaymen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://ruby.libhunt.com/newsletter"&gt;Awesome Ruby&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.rubylove.com/newsletter-signup"&gt;Ruby Love&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  .8 YouTube Channels
&lt;/h2&gt;

&lt;p&gt;YouTube offers a lot of free video tutorials about Ruby programming language. Video education that shows step-by-step instruction could be essential for beginners. Of course, more advanced tutorials are also available. The only thing you need to be careful about is the quality of knowledge. As the entry barrier is quite low and everyone can upload the video, it is worth to follow only reliable creators. &lt;/p&gt;

&lt;p&gt;Check those YouTube channels: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=7-1HCWbu7iU&amp;amp;list=PL23ZvcdS3XPLNdRYB_QyomQsShx59tpc-"&gt;Mackenzie Child&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=M9-em3FYMNU&amp;amp;list=PLjQo0sojbbxWXYhditpqZlN4oLJE4hLjP"&gt;Codemy School&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.railwaymen.org/cs/c/?cta_guid=7d85b530-255b-4409-801f-bd71d33c1164&amp;amp;placement_guid=16501730-29c1-4600-ae5a-894bbf128ac1&amp;amp;portal_id=2581766&amp;amp;canon=https%3A%2F%2Fblog.railwaymen.org%2Fhow-to-learn-ruby-on-rails&amp;amp;redirect_url=APefjpHGGt6ZNG2mubN2_CrXOreOrMnjTPPrPVJ9kGwe0zsIZ0BcEp5C-6RmaOcJ0jlGKVDeeprWpxTbww_FkGY6LjoeHPDOLbTD2vF3JYvFpigoLefDM00KflYIqvswuDU-WJ43_kJvFQz6iAUT2Rf40eDqgP57Ik4BBPxGLR6tJ2qKLnEyEG9mSF4yDraBxJzcrai8QZp284ZEcTWtK4Y90UfJlycmzFjr_npqqQ01hr6CBwde67V6gbOGUvM9k1v3x2x_NC6GBDMgm8eOjoW36RaIDLPFOAYnNh8UV0iJ2TbcY9Z9i26LO3_XRIXs3gnP_bYx9VDFFr4hMD0Wrxa9UFdWrGqrQg&amp;amp;click=e0e08a95-c301-4b25-9222-1da7e8bf4a55&amp;amp;hsutk=14954517c541afc0b39b2744f6ff11be&amp;amp;signature=AAH58kGX1FgbZmr465pAnCg_nhq31eyZ9Q&amp;amp;utm_referrer=https%3A%2F%2Fblog.railwaymen.org%2F&amp;amp;pageId=6697227916&amp;amp;__hstc=242991517.14954517c541afc0b39b2744f6ff11be.1584525231866.1590072356199.1590086203761.196&amp;amp;__hssc=242991517.10.1590086203761&amp;amp;__hsfp=4133173901&amp;amp;contentType=blog-post"&gt;RWM TechTalks&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Podcasts
&lt;/h2&gt;

&lt;p&gt;Hosts of RoR podcasts share their development experience, coding challenges, and brilliant ideas in projects. That knowledge will spread your programming horizons and help to avoid typical Ruby on Rails bugs. Usually, every episode discusses different topics and brings precise conclusions. The main advantage of podcasts is the possibility of listening to them almost everywhere at any time.&lt;/p&gt;

&lt;p&gt;Click: &lt;a href="https://blog.railwaymen.org/8-ruby-on-rails-podcasts-that-will-expand-your-horizons"&gt;8 Ruby on Rails Podcasts Worth Hearing Out&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Webinars
&lt;/h2&gt;

&lt;p&gt;Participating in webinars is another engaging way to learn about web development and follow the Rails tutorial. Some webinars even contain the whole web framework course.  It is a smart move to take part in some webinar for beginners if you are wondering whether programming is for you. It will give you an overview of developer work reality. You can find many transmissions of Ruby on Rails webinars in Google or follow web development companies, which organize webinars and share their knowledge.&lt;/p&gt;

&lt;p&gt;Examples of RoR webinars:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=-AdqKjqHQIA"&gt;Learn Ruby on Rails from Scratch&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=c4ybC5bUA7U&amp;amp;list=UUkw4JCwteGrDHIsyIIKo4tQ&amp;amp;index=1647"&gt;Building Application With Ruby On Rails Framework&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=t_ispmWmdjY&amp;amp;t=8s"&gt;Ruby Programming Language - Full Course&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Events
&lt;/h2&gt;

&lt;p&gt;Ruby, just like other web development frameworks, gathers the community at events and conferences. It gives you access to the top RoR experts. If you don't have an opportunity to take part in such a meeting, don't worry. Check if the promoter uploads live-streaming. Right now, many events provide online transmission through social media. &lt;/p&gt;

&lt;p&gt;The most popular RoR events:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://railsconf.com/"&gt;RailsConf&lt;/a&gt;&lt;br&gt;
&lt;a href="http://rubyconf.org/"&gt;RubyConf&lt;/a&gt;&lt;br&gt;
&lt;a href="https://krug.org.pl/"&gt;KRUG - Krakow Ruby Users Group&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  So, what is the best way to learn Ruby on Rails?
&lt;/h3&gt;

&lt;p&gt;One of the ways, described by our Senior RoR Developer Karol, is to start with this pleasant, 30 minutes Try Ruby tutorial. Next, move to the official guide Getting Started with Rails, where you'll learn how to install Rails, create a new Rails application, connect it to a database and many more. After that, just start some project, and when you face some problems, search the solutions in Stack Overflow.&lt;/p&gt;

&lt;p&gt;There is nothing more effective than learning by practicing. The theory will never give you such incredible results as training. Don't stick with theoretical knowledge for too long. All you need to do is open your editor and start to code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9lz5Vu08--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Szymon-learn-ror2-min.png%3Fwidth%3D759%26name%3DSzymon-learn-ror2-min.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9lz5Vu08--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Szymon-learn-ror2-min.png%3Fwidth%3D759%26name%3DSzymon-learn-ror2-min.png" alt="ruby on rails"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How long does it take to learn Ruby on Rails?
&lt;/h3&gt;

&lt;p&gt;Well, this is strongly related to your engagement &amp;amp; enthusiasm in learning and reliability in practicing. Remember that this is not a speed race, just take your time and focus on the goal. How long can the course take? For example, The Complete Ruby on Rails Developer Online Course by Udemy lasts over 45 hours, while Ruby on Rails Bootcamp in NYC by Noble Desktop is about 60 hours. Of course, this is only the duration of lessons. You need to add practicing time to that. Predictions for very beginners are about 5-6 months for self-learning and 3-4 months for learning with a mentor. Remember that technology is variable. Developers need to improve their skills constantly to stay on the top of the game and deliver perfect projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--40sjXzvL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Tomek-learn-ror-min.png%3Fwidth%3D1200%26name%3DTomek-learn-ror-min.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--40sjXzvL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Tomek-learn-ror-min.png%3Fwidth%3D1200%26name%3DTomek-learn-ror-min.png" alt="how to learn ruby on rails"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Your way of education depends on your level of skills. The beginner probably will choose a completely online course or code school, while an experienced developer will enjoy listening to the podcasts or watching YouTube tutorial about some particular RoR issue. In the first step, we advise you to describe your current abilities honestly.&lt;/p&gt;

&lt;p&gt;If you are a beginner, we recommend you to choose the source of education that also offers the possibility of learning HTML, CSS, and JavaScript. It is beneficial to learn in English because Ruby syntax is pretty similar to English, and you'll become more attractive to a future employer.&lt;/p&gt;

&lt;p&gt;You have to be aware that every programmer needs to be up-to-date with IT news, and it could be challenging. That's why this article also shows sources that will help you to keep up with Ruby on Rails. It is essential to visit them regularly.&lt;/p&gt;

&lt;p&gt;For more tips on how to become a better programmer, check this article: &lt;a href="https://blog.railwaymen.org/how-to-become-a-good-junior-web-developer-5-healthy-habits-to-learn-right"&gt;How to Become a Better Junior Ruby on Rails Developer&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Vue vs React - Which One is Better for Your App? Similarities &amp; Differences</title>
      <dc:creator>Iza Rokita</dc:creator>
      <pubDate>Thu, 30 Apr 2020 10:38:44 +0000</pubDate>
      <link>https://dev.to/railwaymen/vue-vs-react-which-one-is-better-for-your-app-similarities-differences-2poi</link>
      <guid>https://dev.to/railwaymen/vue-vs-react-which-one-is-better-for-your-app-similarities-differences-2poi</guid>
      <description>&lt;p&gt;Some time ago, I decided to improve my skills related to frontend parts of web applications. From a list of the most popular JavaScript frameworks, I chose Vue and it was a love from the first 'To-do List'. The fruit of that love is &lt;a href="https://github.com/railwaymen/evally?__hstc=242991517.14954517c541afc0b39b2744f6ff11be.1584525231866.1588161805043.1588190930723.126&amp;amp;__hssc=242991517.1.1588242241640&amp;amp;__hsfp=725557957&amp;amp;hsCtaTracking=f6d1bc5d-8262-49e3-a40b-af12c81f39a2%7Ca44c94a0-c746-4bfc-8d1c-ac78b0aa3e70"&gt;Evally&lt;/a&gt; - an open-source single page application to evaluate and manage employees correspondingly to their soft and technical skills.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tvv9YCp_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Vue%2520vs%2520React%2520-%2520Which%2520One%2520is%2520Better%2520for%2520Your%2520App-min.png%3Fwidth%3D1250%26name%3DVue%2520vs%2520React%2520-%2520Which%2520One%2520is%2520Better%2520for%2520Your%2520App-min.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tvv9YCp_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/Vue%2520vs%2520React%2520-%2520Which%2520One%2520is%2520Better%2520for%2520Your%2520App-min.png%3Fwidth%3D1250%26name%3DVue%2520vs%2520React%2520-%2520Which%2520One%2520is%2520Better%2520for%2520Your%2520App-min.png" alt="Vue vs react"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, a character and tech stack of current commercial projects jolly me to get familiar with React. After a few months of work with these powerful tools, I would like to present a short comparison and summary.&lt;/p&gt;

&lt;h3&gt;
  
  
  A brief history of React.js
&lt;/h3&gt;

&lt;p&gt;React was created by a team of Facebook developers and released with an open-source license in 2013. Its improvements are an answer to the growing needs of the world’s biggest social media platform. &lt;/p&gt;

&lt;p&gt;Next to Facebook and it’s services: Instagram and WhatsApp, React is used by many popular web services like:&lt;/p&gt;

&lt;p&gt;Netflix - movies and TV shows online streaming platform,&lt;br&gt;
The New York Times - an American newspaper with worldwide influence and readership&lt;br&gt;
Codeacademy - an online interactive learning platform&lt;br&gt;
Airbnb - an online marketplace for arranging or offering lodging&lt;br&gt;
Disqus - a worldwide blog comment hosting service&lt;/p&gt;

&lt;h3&gt;
  
  
  A brief history of Vue.js
&lt;/h3&gt;

&lt;p&gt;The first public version of Vue was released in 2014. In the opposite to React, Vue was initially created by a single man - Evan You,  a former employee of Google. His intention was to get the best aspects from other frameworks and create a really lightweight and easy to learn tool for web developers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I figured, what if I could just extract the part that I really liked about Angular and build something really lightweight.&lt;/em&gt;&lt;br&gt;
Evan You&lt;/p&gt;

&lt;p&gt;Currently, Vue and it’s related development tools are in the hands of a large community of contributors. In the nearest days, it is planned to release a new major version 3.0. The best-known applications written with Vue are:&lt;/p&gt;

&lt;p&gt;Gitlab - a web-based tool for project planning, source code management and DevOps&lt;br&gt;
Behance - a social media platform for creative people&lt;br&gt;
Alibaba - a leading wholesale mobile marketplace for global trade&lt;br&gt;
UpWork -  is a global freelancing platform where businesses and independent professionals connect and collaborate remotely&lt;br&gt;
Buzzfeed - an American provider for media, news and entertainment&lt;br&gt;
Grammarly - a digital writing tool using artificial intelligence and natural language processing&lt;/p&gt;

&lt;h2&gt;
  
  
  Vue vs React comparison: differences &amp;amp; similarities
&lt;/h2&gt;

&lt;p&gt;Now it's time to look at those two Javascript frameworks a little bit closer. Because even though they share the same core language - there are some differences between them, that may influence your decision to choose one for your next app project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are React.js and Vue.js similar?
&lt;/h3&gt;

&lt;p&gt;Both Vue and React have a lot in common. Let’s focus on the most important features:&lt;/p&gt;

&lt;p&gt;Virtual DOM - that mechanism allows improving application performance. React and Vue detects which website elements have changed and re-render only these elements. This approach is less time-consuming than the re-render process of the whole DOM structure.&lt;br&gt;
Reactive and composable view components - many small pieces of code, called components, can be used in different places in an application without coding and setting them from scratch. It causes the development process can take less time and the code can be easier to maintain.&lt;br&gt;
Core library and extensions - both frameworks can be used to create advanced applications using extra companion libraries for own routing and state management as well as really simple elements on a website like a login form base only on a core part of the framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference?
&lt;/h3&gt;

&lt;p&gt;For the first sight, the biggest difference is the way of building a view layer. In React, all components use a render function that generates UI elements from code written with JSX - a declarative XML-like syntax that works within JavaScript.&lt;/p&gt;

&lt;p&gt;Vue also offers a render function and support for JSX, but by default, it uses HTML templates as a simpler alternative. This solution has a few advantages:&lt;/p&gt;

&lt;p&gt;many developers are familiar with HTML syntax so Vue templates might be more natural and readable for them&lt;br&gt;
it is easier to migrate existing HTML-based pieces of code progressively because any valid HTML is also a valid Vue template&lt;/p&gt;

&lt;p&gt;In addition, Vue introduces some custom but intuitive and understandable directives to handle such elements as conditions, loops, and data binding. Feel free to compare below the same component written in Vue and React.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UAJmEMQA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn2.hubspot.net/hubfs/2581766/01%2520Vue%2520vs%2520React%2520Sample%2520of%2520component%2520structure%2520written%2520with%2520Vue%2520and%2520React.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UAJmEMQA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn2.hubspot.net/hubfs/2581766/01%2520Vue%2520vs%2520React%2520Sample%2520of%2520component%2520structure%2520written%2520with%2520Vue%2520and%2520React.png" alt="vue vs react"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sample of component structure written with Vue and React&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Vue better than React?
&lt;/h3&gt;

&lt;p&gt;In that case, there might be as many answers as users. It also depends on which aspects we take into consideration. Based on the data from the website State of JS 2018 I prepared a chart to show which features developers praise the most.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pywzrk0u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/02%2520Vue%2520vs%2520React%2520Percentage%2520of%2520developers%2520who%2520use%2520particular%2520framework.png%3Fwidth%3D1999%26name%3D02%2520Vue%2520vs%2520React%2520Percentage%2520of%2520developers%2520who%2520use%2520particular%2520framework.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pywzrk0u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/02%2520Vue%2520vs%2520React%2520Percentage%2520of%2520developers%2520who%2520use%2520particular%2520framework.png%3Fwidth%3D1999%26name%3D02%2520Vue%2520vs%2520React%2520Percentage%2520of%2520developers%2520who%2520use%2520particular%2520framework.png" alt="vue vs react"&gt;&lt;/a&gt;&lt;br&gt;
Percentage of developers who use a particular framework&lt;/p&gt;

&lt;p&gt;As we can see, Vue is evaluated as a simple and easy to learn tool with excellent documentation and quite good performance. On the other hand, React is more appreciated for a rich package ecosystem, powerful development tools and an experienced team of creators.&lt;/p&gt;

&lt;p&gt;When it comes to choosing the best technology stack for your app idea - this is one of the biggest advantages of the &lt;a href="https://dev.toDiscovery"&gt;Discovery Phase&lt;/a&gt;. Thanks to this consulting, separate service (it doesn't entitle you in any way to develop an app with us) you will receive your app wireframes, technical documentation, estimation and recommendation, which programming language will be best for YOUR custom software. &lt;/p&gt;

&lt;h3&gt;
  
  
  Will Vue replace React?
&lt;/h3&gt;

&lt;p&gt;Once upon a time in a place far, far away, was a kingdom where… I can tell you fairy tales or my vague predictions here, but it’s not the point. The truth is that right now, these two JavaScript frameworks are the most popular in their category and gain popularity in a similar way. React is a distinct leader when we consider a number of downloads from NPM. On the other hand, for some time, Vue is more popular among Github users. &lt;/p&gt;

&lt;p&gt;In my opinion, there always will be enthusiasts and opponents for each tool. The best approach might be to be an expert for one tool and have some knowledge for another - just to have wider horizons in the tech stack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h1rj6IYx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn2.hubspot.net/hubfs/2581766/03%2520Vue%2520vs%2520React%2520Weekly%2520downloads%2520from%2520NPM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h1rj6IYx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn2.hubspot.net/hubfs/2581766/03%2520Vue%2520vs%2520React%2520Weekly%2520downloads%2520from%2520NPM.png" alt="vue vs react"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vue &amp;amp; React - weekly downloads from NPM&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M1McKG_J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn2.hubspot.net/hubfs/2581766/04%2520Vue%2520vs%2520React%2520Stars%2520on%2520Github.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M1McKG_J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn2.hubspot.net/hubfs/2581766/04%2520Vue%2520vs%2520React%2520Stars%2520on%2520Github.png" alt="vue vs react"&gt;&lt;/a&gt;&lt;br&gt;
Vue &amp;amp; React - stars on Github&lt;/p&gt;

&lt;h3&gt;
  
  
  Which framework is worth using for your app project?
&lt;/h3&gt;

&lt;p&gt;Vue is called by its creator as a progressive framework, which means that you can start from a single, small component and then transform your website step by step to the interactive and professional application. Easy learning curve and &lt;a href="https://blog.railwaymen.org/what-are-the-requirements-for-software-documentation-free-template"&gt;well written documentation&lt;/a&gt; enable your team a faster MVP development. In the case of existing projects, a quick integration allows facing complex issues in a slightly easier, shorter and cheaper way.&lt;/p&gt;

&lt;p&gt;From the first release, React was targeted to create large-scale web applications, so basically, it might be quite unreasonable to use it for small projects. Basic configuration requires more time, but it will be viable in case of long-term projects.&lt;/p&gt;

&lt;p&gt;We can't forget about a wider market of experienced React specialists, which matters in case of growing development teams or a need to find a replacement.&lt;/p&gt;

&lt;p&gt;Read article: &lt;a href="https://blog.railwaymen.org/how-to-become-a-good-junior-web-developer-5-healthy-habits-to-learn-right-away?hsCtaTracking=625bd38d-b8fb-42dd-9610-a964a916d582%7C61c86b85-47f8-4ec0-88e8-65df05c48cbd"&gt;How to become a better Junior Developer?&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;To sum up, both Vue and React are great tools to create modern and advanced applications. Before you make a choice, which of these two frameworks use in a project, you need to define your use case and answer to yourself what are your needs and expectations, what budget you have, and which deadline you want to meet.&lt;/p&gt;

&lt;p&gt;Vue will be a better option for small and medium applications, as well as for MVPs with short time frames. Vue environment also offers official packages for routing, state management and server-side rendering purposes, which guarantee up-to-date support and better integration. This is the main reason why I chose Vue and built Evally as a single page application. An elegant template syntax and clear structure of components cause that work with this framework is a pleasure for me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_bKaz5uZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn2.hubspot.net/hubfs/2581766/EVALLY%2520PROMOTION-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_bKaz5uZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn2.hubspot.net/hubfs/2581766/EVALLY%2520PROMOTION-1.png" alt="vue vs react"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, React can be already treated as a mature framework with a rich ecosystem and a very experienced community. Even though React requires third-party solutions to handle routing and state management, the vast majority of developers have trusted libraries and enough experience to face that imperfection and create stunning applications.&lt;/p&gt;

&lt;p&gt;Choosing the proper technology has a meaningful impact on application success. We have more comparing articles. Want to build a perfect mobile application? Read about &lt;a href="https://blog.railwaymen.org/swift-vs-react-native-which-one-should-you-choose-to-build-your-mobile-app"&gt;Swift vs React Native&lt;/a&gt;. Considering between Ruby on Rails and Laravel? Discover &lt;a href="https://blog.railwaymen.org/ruby-on-rails-vs-laravel-which-one-is-better-for-app-development?hsCtaTracking=caf39b46-3a05-4daf-b9e9-4a88177b2c97%7Ce4ad4193-574a-4fb7-8fd2-f950971dda70"&gt;the pros and cons of those technologies&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We can deliver essential programming knowledge (tutorials, reviews, tips) straight to your inbox. &lt;a href="https://learn.railwaymen.org/newsletter"&gt;Subscribe to our newsletter here&lt;/a&gt;!&lt;/p&gt;

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

</description>
      <category>vue</category>
      <category>react</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to Become a Better Junior Developer: 5 Healthy Habits to Learn Right Away</title>
      <dc:creator>Iza Rokita</dc:creator>
      <pubDate>Tue, 21 Apr 2020 07:18:50 +0000</pubDate>
      <link>https://dev.to/railwaymen/how-to-become-a-better-junior-developer-5-healthy-habits-to-learn-right-away-4gnb</link>
      <guid>https://dev.to/railwaymen/how-to-become-a-better-junior-developer-5-healthy-habits-to-learn-right-away-4gnb</guid>
      <description>&lt;p&gt;Nowadays lots of people want to get started their professional careers as web developers. The perspective of a really good income in the future and working in the IT sector, where the demand for people is very high (even for entry-level jobs!) attracts many people to these kinds of jobs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sxlrLyz4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/junior%2520web%2520developer.jpg%3Fwidth%3D2880%26name%3Djunior%2520web%2520developer.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sxlrLyz4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hs-fs/hubfs/junior%2520web%2520developer.jpg%3Fwidth%3D2880%26name%3Djunior%2520web%2520developer.jpg" alt="Junior web developer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It means, that for the one junior web development job offer might apply thousands of people at the same time. So if you have already landed yourself a job as a junior developer - congrats! But what should you do next? First of all - switch your mindset from "how to become a junior developer" (you already achieved that, as you kicked-asses at your interview process!) to "how to become a BETTER junior developer".&lt;/p&gt;

&lt;p&gt;Because obviously - you don't want to be called a junior developer for life. Especially, as your salary as a regular web developer &lt;a href="https://bulldogjob.com/it_report_2019"&gt;according to the Bulldogjob report&lt;/a&gt;, can be twice, or even four-time higher! So, there is definitely a strong motivation here to make sure, that you benefit from your first job as a junior developer as much as you can. And I'm here to help you with that. Using my experience as a junior developer in a &lt;a href="https://railwaymen.org"&gt;Cracow, Poland based software house Railwaymen&lt;/a&gt; I will try to guide to make sure, that you will become a mid developer in no-time!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why have I decided to become a software developer?
&lt;/h2&gt;

&lt;p&gt;The answer to such a question is rather not straightforward, and it is an outcome of good and bad decisions from my past. I originally graduated and got my bachelor's degree in the field of drilling and mining, but I am not working as a miner... Ruby mining does not count, right? :D At the time I started studying, there were a lot of rumors about the Polish shale gas revolution and future career possibilities. Well, the reality turned out to be different, and there was hardly any job in the oil and gas industry that I found worth applying. &lt;/p&gt;

&lt;p&gt;That time I decided to put one year of hard work into learning programming and eventually become a junior developer! Software development was rather evident and natural direction for me, as I have always been a person who spends a lot of time reading blogs, embraces the learning process, and love challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Ruby on Rails?
&lt;/h2&gt;

&lt;p&gt;When deciding which programming language to learn, I take into consideration atypical key factors. I do not blindly follow language popularity charts and hype that is around certain languages. I believe that it is very important to determine what factors are most important to YOU at the very beginning of your journey as a junior developer. Is it the language easiness to learn? The money, that you can earn? Or the number of developer jobs in this particular language available in your country? Make sure, that you have it sorted out when you start learning a programming language.&lt;/p&gt;

&lt;p&gt;My main goal was to work in a software house with a goal-oriented environment and a flat structure that will allow me to have a real impact on the product. Based on that preferences Ruby on Rails was a great pick for me as the companies that use RoR have precisely such an environment. If we add grown, established community with a lot of good examples and resources, Ruby on Rails is a sweet spot for an aspiring junior developer.&lt;/p&gt;

&lt;h1&gt;
  
  
  5 Healthy Habits of a Better Junior Developer
&lt;/h1&gt;

&lt;p&gt;In this section, I would like to focus on habits that could help you to take "junior" from your title as fast as possible. If you are no longer junior, don't leave just yet because most of the listed bits of advice are also applicable for more experienced developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Find valuable and reliable blogs and tutorials
&lt;/h2&gt;

&lt;p&gt;I can't stress enough how significant and a big switch for me was reading certain tech articles and exploring some of the open-source codebases. I am using them to this day as my go-to resource when looking for an alternative way of thinking when it comes to developing new features. Remember, there are a lot of good examples, and we don't have to reinvent the wheel.&lt;/p&gt;

&lt;p&gt;Be cautious, though - there are a lot of bad examples out there! I would highly suggest to verify and discuss some of the solutions you can find with the help of a friendly, more experienced developer/mentor.&lt;/p&gt;

&lt;p&gt;If you're interested in blogs and books that we at Railwaymen recommend for our fellow Ruby on Rails developers, take a look at our blog posts here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.railwaymen.org/8-ruby-on-rails-books-you-should-read-to-become-a-better-developer"&gt;8 Ruby on Rails Books You Should Read to Become a Better Developer&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.railwaymen.org/10-ruby-on-rails-blogs-you-should-be-following"&gt;10 Ruby on Rails Blogs You Should Be Following&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.railwaymen.org/8-ruby-on-rails-podcasts-that-will-expand-your-horizons"&gt;8 Ruby on Rails Podcasts That Will Expand Your Horizons&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Get your git workflow to the next level by writing descriptive commit messages
&lt;/h2&gt;

&lt;p&gt;Like I mentioned before, some articles that I have read changed the way I think about certain things. &lt;a href="https://thoughtbot.com/blog/5-useful-tips-for-a-better-commit-message"&gt;Thoughtbot's blog post about git commits&lt;/a&gt; was definitely one of them. By writing the commit message that includes answers to the following questions:&lt;/p&gt;

&lt;p&gt;Why is the change in this commit necessary?&lt;br&gt;
How does the commit address the issue?&lt;br&gt;
What side effects does this change have?&lt;/p&gt;

&lt;p&gt;Not only are you making the life of the person that reviews the pull request code, but you are providing a piece of information that could help other developers in better understanding the project. Make sure, that you are dedicating to this matter enough amount of your attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Look for continuous improvement, follow best programming practices
&lt;/h2&gt;

&lt;p&gt;I know it may sound a bit trivial and general, but I believe that regardless of programming language or seniority level, there are some rules that we should get to know and TRY to follow. Don't get me wrong. I am not trying to tell that there is always one right way to write code. I am just emphasizing that junior developers should not only concentrate on blindly delivering tasks ( that might be alright for the entry level job, but it's definitely not if you want to promote) to the end but also focus on writing maintainable and deliberated code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/playlist?list=PLj9jb4d6_tlK7MTP1iEr1RLGg33hD7I8t"&gt;At Railwaymen we organise Friday Tech Talks&lt;/a&gt;, which aim is to provide knowledge on the most interesting software-related topics. &lt;/p&gt;

&lt;p&gt;Keep in mind that, as a junior developer, you are in a privileged position. You will most likely have fewer duties and responsibilities, so you should consider investing extra time you got to examine alternative solutions with other more experienced developers and slowly master your skills. The sooner you get started with that, the better.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Test-driven juniorship.
&lt;/h2&gt;

&lt;p&gt;During my first month of juniorship, I have made a habit of writing good and readable tests. At first glance, it sounds scary to try TDD approach or even write tests at all. But trust me, after you introduce writing tests to your workflow, soon they will become your best ally.&lt;/p&gt;

&lt;p&gt;Well written tests can save you a ton of time at your job in multiple ways:&lt;/p&gt;

&lt;p&gt;Specs provide a sort of safety while working with the existing code. The application that is covered with tests is much less likely to break.&lt;br&gt;
Come on - everybody makes typos, and again tests can help you with that. &lt;a href="https://blog.railwaymen.org/ruby-vs.-php-which-one-is-right-for-your-project"&gt;This exceptionally accurate while writing Ruby.&lt;/a&gt; Ruby code, unlike Java's, does not require compilation before running. Tests can serve you as a kind of compilator that will catch your syntax errors upfront and prevent them from smuggling to production code.&lt;br&gt;
 Tests can reproduce user behaviors during the development phase of the project and help you to write better-designed code with fewer errors.&lt;br&gt;
  &lt;/p&gt;

&lt;h2&gt;
  
  
  5. Surround yourself with passionate people
&lt;/h2&gt;

&lt;p&gt;After all, your days as a junior web developer should be fun, so find the right people who share the same interest and passion for programming. Discuss with them the new exciting javascript frameworks that came out just today and how XXX language is better than another. Consider attending to local meetups as they are a great place to make new friends and get knowledge from first hand. Just make sure that you squeeze everything you can from your first job as a web developer and you should be alright.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Being a junior web developer must not always stand us in an unfavorable position. With a little bit of self-discipline and willingness, you can use your entry level job time to put your career on the fast track. I don't want to be a motivational coach, but it all starts with a small change - slowly building your habits and workflow will help you to become a much better developer. These five above are the ones that helped me the most to stand out as a junior web developer. Wishing you all the best in your journey to land in one of those regular developer jobs! &lt;/p&gt;

&lt;p&gt;As I mentioned in the text - being surrounded by great people is a key, to become a successful junior web developer. Here at Railwaymen, we're lucky to gather more than 50 ambitious, passionate and hard-working people under the one roof. &lt;a href="https://railwaymen.org/meet-the-team?"&gt;You can meet our team here&lt;/a&gt; and see &lt;a href="https://railwaymen.org/portfolio"&gt;what we do here&lt;/a&gt;. Cheers!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>rails</category>
      <category>firstyearincode</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Swift vs React Native: Which One Should You Choose to Build Your Mobile App? </title>
      <dc:creator>Iza Rokita</dc:creator>
      <pubDate>Mon, 23 Mar 2020 18:28:24 +0000</pubDate>
      <link>https://dev.to/railwaymen/swift-vs-react-native-which-one-should-you-choose-to-build-your-mobile-app-2bjm</link>
      <guid>https://dev.to/railwaymen/swift-vs-react-native-which-one-should-you-choose-to-build-your-mobile-app-2bjm</guid>
      <description>&lt;p&gt;In the last few years, mobile development has become very influential and beneficial. Many different companies think about creating an app for their service (to, for example, &lt;a href="https://railwaymen.org/case-studies/costtracker"&gt;streamline the cost management in their company&lt;/a&gt;) or develop one as their product, which will become valuable for the users. Both approaches are focused around the idea, that app development purpose is to bring you money. And it is definitely achievable!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FK2jBa1z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y63436gmg3b9fx42rihd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FK2jBa1z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y63436gmg3b9fx42rihd.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When a company comes up with an idea for an app, their second thought should be: what technology should be used to make it (and even what technologies exist actually). When it comes to mobile apps development, the most popular technology recently is React Native, because the development is seemingly the cheapest and the fastest because of making one application for both Android and iOS. Usually, the thought of making a native app comes as the second one, but after considering the costs of development it is not as attractive because of the need of making two separate applications for both top mobile platforms.&lt;/p&gt;

&lt;p&gt;What if it isn’t the best approach? The decision of what technology should you use (Swift vs React Native) needs longer consideration because it is a very important part of the project. I would like to show you some pros and cons of both of these technologies, basing on my professional experience as an iOS Developer. But first of all… &lt;/p&gt;

&lt;h2&gt;
  
  
  About the React Native vs Swift article author: who am I?
&lt;/h2&gt;

&lt;p&gt;My name is Bartek and I am an iOS developer in the Cracow software house Railwaymen.I've been making mobile apps using Swift for 2,5 years already and I’m still fascinated with Apple’s products because, against all appearances, it has no competition!&lt;/p&gt;

&lt;p&gt;Apple gives its users a closed ecosystem developing devices with their own operating system which makes it more secure than products of any other company. Moreover, the main goal of Steve Jobs’ business is the User Experience (UX) and intuitive layout which are also my goals as the developer with an idealistic vision of the world. That’s why I’m so excited about my profession and why this article has been written.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Swift native? How can you tell?
&lt;/h2&gt;

&lt;p&gt;Swift is a fairly new programming language released on September 9, 2014, as a substitute for the previously existing on Apple’s platform Objective-C. It is also hosted by Apple, which means that Apple leads and supervises the development and that all components used in Swift are prepared and designed by Apple for their system. This is what makes it native - it is designed exactly to act with iOS.&lt;/p&gt;

&lt;h2&gt;
  
  
  But what is React Native then?
&lt;/h2&gt;

&lt;p&gt;The word “Native” can be actually misleading. This doesn’t mean that this is native, but that it uses native components. We can understand it after we acknowledge different approaches in the past of mobile apps development. Some of them used to create web applications and run them on iOS as in the browser. React Native differs from them, because it doesn’t create a web page, but uses components created by Apple to build a real application using JavaScript which is strongly used in web development. The main strengths of this technology are the cost and speed of development. But...&lt;/p&gt;

&lt;h2&gt;
  
  
  Is React Native better than Swift?
&lt;/h2&gt;

&lt;p&gt;Looking at the strengths and weaknesses of both solutions you probably still think why development native apps could be better than using React Native. I wrote at the beginning of the article that the lowest cost of development with React Native is apparent in most cases. It is good for simple apps that really need to be developed as soon as possible or if the application is not important for the prospering of the company (e.g. simple app for checking public transport timetable). Native apps are much better for long-term or more complex projects (e.g. e-learning or streaming platform) because they are easier to maintain and perform better. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GtgUL9Er--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jx874m47nmvyvghx93gt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GtgUL9Er--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jx874m47nmvyvghx93gt.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maintainability is a very important factor here, because, for example, if we would like to add to the app, after a few months of a break in the development, a new component, it would determine how much time it would consume to get into the code for the programmer. It is harder to get into JavaScript code used in React Native development than into Swift code because of the construction of these languages. Swift is a dynamically evolving language with frequent updates, which makes creating apps getting easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Will React Native replace Swift?
&lt;/h2&gt;

&lt;p&gt;It is hard to tell what technologies will be popular in 10 years, but for now, there’s no technology as well-working as native technologies when it comes to mobile apps. It is so because native apps work quicker and are prettier. Differences in design can be invisible on Android, but for iOS users it’s easy to say if the app has been done with Apple’s guidelines. Yes, React Native uses native components, so doing a good layout is possible, but it is hard to find a React Native app that does it in the right way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Swift vs React Native: Each Technology Pros and Cons
&lt;/h2&gt;

&lt;p&gt;Now it's time to dive deeper into both of these mobile app development programming languages and acknowledge their strengths and weaknesses. Both Swift and React Native are perfectly fine to build an iOS app. But as it often is in app development world - depending on the type of your project, one can be better than the other. So, without further notice, let's start the ultimate React Native vs Swift competition - enjoy!&lt;/p&gt;

&lt;h3&gt;
  
  
  Swift advantages &amp;amp; disadvantages
&lt;/h3&gt;

&lt;p&gt;➕ Very organized community - developers can get much help from solutions to problems to guide how their code should be formatted. The community of Swift developers is very constrained to Apple which really cares about the needs of iOS developers and users of their code. That means Swift coding is standardized and every code could be understood by the experienced developer.&lt;/p&gt;

&lt;p&gt;➕ Better performance - it is slightly better in a normal-case application because Swift is based on memory usage, but React Native apps base on CPU usage. It makes a much more significant difference in big, complex applications that have solutions that are out-of-the-box. &lt;/p&gt;

&lt;p&gt;➕ Quicker updates to the newest version of the iOS - apps built with Swift are really native, and code is low-level which means that every interface Apple does is directly used by developers. So when Apple releases a new version of iOS with new features or new look which have to be at first adapted by the developer, native developers have a codebase needed for releasing the new version really quickly and it’s independent of third party libraries which actually is a React Native framework.&lt;/p&gt;

&lt;p&gt;➕ Continuously improved language - it doesn’t mean that Swift is written in the wrong way. It means that writing in this language gets easier and faster with every new version. Apple delivers new frameworks and tools to developers, which make development quicker and easier, and it lowers the costs of development.&lt;/p&gt;

&lt;p&gt;➖ The higher cost of development - it’s not higher if the app is being built only on one platform, but if a client wants to have an Android app now or in the future, then cost probably will be higher because business logic has to be written twice in different languages (Swift on iOS and Kotlin on Android).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iA8_58oi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y08j0fwo3pyy0cu4tk4l.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iA8_58oi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y08j0fwo3pyy0cu4tk4l.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;➖ Frequent updates of the language - this is a continuation of the previous point because it means higher costs of maintenance of the app. Swift is a rapidly evolving language, which is upgraded each year to the new major version. For the developers, the release means, that they have to spend additional time converting current code to the new version, which should be done automatically, but many things have to be done manually. The problems then are unsupported third-party libraries which cannot be used if their Swift version is too low because they need to be updated at first.&lt;/p&gt;

&lt;h3&gt;
  
  
  React Native advantages &amp;amp; disadvantages
&lt;/h3&gt;

&lt;p&gt;➕  Stable and known language - JavaScript used for the development is known to many people connected mainly with web apps development. Saying that this is stable means that updates aren’t so frequent as in the case of Swift and surely aren’t breaking as frequently as Swift updates. Remember that JavaScript has existed since 1997 which makes the community of developers much bigger than in the case of Swift.&lt;/p&gt;

&lt;p&gt;➕  Lower costs of cross-platform application development - it is probably the main advantage that is taken into account when a client decides to choose React Native, that you can develop with it an app both for iOS and Android. So the cost is actually lower if the logical part of the application can be used in the iOS and the Android version. For one-platform applications, this point shouldn’t be considered relevant, because the cost will be comparable.&lt;/p&gt;

&lt;p&gt;But remember to be very careful at this point, to not repeat the Airbnb mistake. They've decided to develop their app in React Native yet, it didn't meet their expectations. After all - they had to develop a native app in iOS, losing lots of money that they invested in a cross-platform one done with React. &lt;a href="https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a?__hssc=242991517.3.1584987090511&amp;amp;__hstc=242991517.7ac41149e2e45fd5d8d743bf01b27ee4.1583353823428.1584977933523.1584987090511.49&amp;amp;__hsfp=3801033111&amp;amp;hsCtaTracking=a3267bdf-f069-4b9f-bf04-d7773c620b26%7Cdadf345e-7597-482e-8f41-46f73a6883ea"&gt;You can read more about it here!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;➕ Good for simple application - if you just want to show some information on the user phone’s screen, get some of his data, e.g. to take his order for food or to show when the event he wants to attend will start it is a good technology to do this.&lt;/p&gt;

&lt;p&gt;➖ The community should learn a lot - unfortunately, the React Native community comes from web development. Such a developer coming from web development doesn’t know how mobile apps work behind the scenes, understanding of which is really important to avoid common bugs. Thus when choosing this technology it is very important to know what experience the working team has because React Native is easy to get in, but very hard to do apps the way they should be done.&lt;/p&gt;

&lt;p&gt;➖ Slower on iOS - it cannot be seen if the developers know how to develop a mobile app and the app isn’t much complicated. But if the client wants some not very common component in his app, the difference can be significant. As I mentioned before, applications built using this technology are based on CPU usage, and complex operations and calculations will be more expensive to the device’s resources than with Swift, which bases on RAM usage.&lt;/p&gt;

&lt;p&gt;➖ Dependent to native code - every component, which will be used with React Native should at first be done with native (in most cases Objective-C) code. This means that when Apple releases an update for iOS, Facebook has to release an update to React Native to use new features derived by Apple. After this, developers can use the new interface and new features provided by Apple for iOS.&lt;/p&gt;

&lt;p&gt;➖ Size of the app - additional code that enables React Native developers to build the app has its size which influences the size of the app. Native apps are lighter than their React Native equivalent (except apps using RxSwift which is a pretty big framework for Swift).&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I don’t want to criticize React Native, because the technology is pretty good and it has legs, but the community of the React Native developers really need to learn many things about the iOS platform, because there are plenty of things to improve. So if you want to learn new technology and you’re looking for information about what’s best, nobody knows what technology will be the best in the future.&lt;/p&gt;

&lt;p&gt;In my opinion, React Native will never be as good as native technologies. If you’re doing research which technology is the best for your app, take all the pros and cons I’ve listed into consideration. If you’re oriented to the best user experience, prefer native technologies over the cross-platform ones. But first - get to know how experienced are developers. Because this is what mainly influences the quality of your app!&lt;/p&gt;

&lt;p&gt;Now you know which mobile app development language is a better choice in your case. Unfortunately, now the harder part begins. Building an iOS app, no matter if it's native or cross-platform mobile is a complex task. You need to have access to a team of talented developers that will guide you through it all and at the end - deliver to you a fully-functional and testes app. &lt;/p&gt;

&lt;p&gt;Happens to be that we're exactly like that! With our +10 years of experience in software development, we'll make something extraordinary for you. &lt;a href="https://railwaymen.org/partnership?estimate%5Bproject_type%5D=mobile"&gt;Just let us know that you're ready here and the rest will become history!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>Golang Tutorial - How to Implement CLI App in 4 Steps Using Cobra?</title>
      <dc:creator>Iza Rokita</dc:creator>
      <pubDate>Fri, 28 Feb 2020 12:47:13 +0000</pubDate>
      <link>https://dev.to/railwaymen/golang-tutorial-how-to-implement-cli-app-in-4-steps-using-cobra-38b9</link>
      <guid>https://dev.to/railwaymen/golang-tutorial-how-to-implement-cli-app-in-4-steps-using-cobra-38b9</guid>
      <description>&lt;p&gt;According to the research, there are between 500 and 2000 active general-purpose programming languages around the world. That's a crazy lot! Yet - the new languages still appear, dethroning some of the old ones. That's why as a self-aware developer you should keep an eye on the latest trends on the market because who knows, maybe the language that you are developing your apps in today, won't be as desirable in the future?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--74ubwMXV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hubfs/golang%2520tutorial.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--74ubwMXV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.railwaymen.org/hubfs/golang%2520tutorial.jpg" alt="golangtutorial" title="Golang tutorial"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And even if it's not the case - programmers today are required to know more than just one programming language. It's also good for your mental health (avoiding getting burned out) to know some other technologies, that you can experiment in. So if you are looking for some new programming language, to expand your horizons - we have some proposition for you!&lt;/p&gt;

&lt;h2&gt;
  
  
  Golang introduction - basic features &amp;amp; language advantages
&lt;/h2&gt;

&lt;p&gt;Go is an open-source programming language (also known as Golang) and it has been developed by Google in 2009. The language Go speed, simplicity, and reliability make it the perfect choice for all kinds of developers. It is used to implement any kind of app: web app, CLI, machine learning tools.&lt;/p&gt;

&lt;p&gt;The main reasons why I have decided to use the Go language are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fast performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Golang is compiled to machine code and its compilation is very fast. The language links all dependency into a binary file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;easy concurrency model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it easy to progress with multiple tasks at the same time. Concurrency is an integral part of Go, supported by goroutines, channels.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;easiness to learn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare to other programming languages like C, C++, Rust etc., Go is easy to learn.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cross-platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can write code in any environment you like - OS-X, Linux, FreeBSD, or Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Golang good for &amp;amp; companies that use it
&lt;/h2&gt;

&lt;p&gt;Some of the biggest companies worldwide have already discovered the potential of Go, using it for their business purposes. You can find some examples of them below:&lt;/p&gt;

&lt;p&gt;Google&lt;br&gt;
digitalocean.com&lt;br&gt;
Airbrake&lt;br&gt;
Atlassian&lt;br&gt;
and more other&lt;/p&gt;

&lt;p&gt;Golang is great to build the Command Line Interface (CLI) app. In this tutorial, I'm going to present step by step how to implement that CLI app using Go lang and Cobra package. Because I believe it is the best way to learn Golang - based on a real-life challenge.&lt;/p&gt;

&lt;p&gt;There are many CLI apps implemented using Golang ie. Docker, Kubernetes, Hugo. The biggest advantage of this kind of apps are:&lt;/p&gt;

&lt;p&gt;the app is lightweight&lt;br&gt;
it's easy to run using terminal scripts i.e zsh, bash&lt;br&gt;
the app is fast&lt;br&gt;
there are no dependencies&lt;br&gt;
it is best for task-based automation&lt;/p&gt;
&lt;h2&gt;
  
  
  Golang tutorial - the app purpose &amp;amp; library introduction
&lt;/h2&gt;

&lt;p&gt;The Golang "duplicate" app&lt;/p&gt;

&lt;p&gt;The app in the tutorial will provide the main features:&lt;/p&gt;

&lt;p&gt;1) create dir for files&lt;br&gt;
2) copy files to the destination directory&lt;/p&gt;

&lt;p&gt;I assume that You have already installed a Golang and set up a development environment for it. The library which is the best match in the case of the CLI app is Cobra.&lt;/p&gt;
&lt;h3&gt;
  
  
  Golang tutorial - Cobra library introduction
&lt;/h3&gt;

&lt;p&gt;Before we start using the Cobra library we need to get to know the concepts behind it.&lt;/p&gt;

&lt;p&gt;"Cobra is built on a structure of commands, arguments &amp;amp; flags. Commands represent actions, Args are things and Flags are modifiers for those actions." - Cobra github&lt;/p&gt;

&lt;p&gt;The structure will be like&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;APPNAME Command Args --flags&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Example app execute in console&lt;/p&gt;

&lt;p&gt;docker ps -a&lt;br&gt;
Hugo new site example.com&lt;/p&gt;
&lt;h2&gt;
  
  
  Go programming tutorial - let's start coding!
&lt;/h2&gt;

&lt;p&gt;If you want to learn golang, this tutorial will show you how you can tackle a specific challenge considering CLI apps, that as developers we often encounter. Enjoy and feel free to let me know in the comment section if anything requires further elaboration!&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Creating the project in Golang
&lt;/h3&gt;

&lt;p&gt;Cobra library provides initializator command for the new project. Let's init base CLI structure using cobra.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cobra init --pkg-name github.com/michalsz/duplicator
duplicator
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Inside the project dir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd duplicator
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Add new action duplicate&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cobra add duplicate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Structure of the project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;duplicate/
  cmd/
    root.go
    duplicate.go
  main.go
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The main.go is the entry point of the CLI. Inside the main.go it is calling the Execute function of the&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cmd/root.go
.
package main

import "github.com/michalsz/duplicator/cmd"

func main() {
        cmd.Execute()
} 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Let's look to root.go The main part of root.go is our command rootCmd where we define it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// rootCmd represents the base command when called without any subcommands
var rootCmd = &amp;amp;cobra.Command{
    Use:   "duplicator",
    Short: "A brief description of your application",
    Long: `A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
    // Uncomment the following line if your bare application
    // has an action associated with it:
    //  Run: func(cmd *cobra.Command, args []string) { },
} 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Build the app without defining any code for root command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go build -o  duplicator main.go &amp;amp;&amp;amp; ./duplicator duplicate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;As a result we get only print in terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;duplicate called
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Let's define a flag for our duplicate command
&lt;/h3&gt;

&lt;p&gt;Define var 'fileExt' to store file extension which kind of file we are going to copy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var fileExt string

    // duplicateCmd represents the duplicate command
    var duplicateCmd = &amp;amp;cobra.Command{
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Add definition flag to init() function in duplicate.go file. Look that the flag extension is required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;duplicateCmd.Flags().StringVarP(&amp;amp;fileExt, "extension", "e", "", "file extension is required")
    duplicateCmd.MarkFlagRequired("extension")
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And print fileExt var in Run section of our command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run: func(cmd *cobra.Command, args []string) {
        fmt.Println("duplicate called")
        fmt.Println(fileExt)
    },
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Let's build and run it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go build -o  duplicator main.go &amp;amp;&amp;amp; ./duplicator duplicate -f txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;As result we get print in console&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;duplicate called
  txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Let's define a new flag 'dirName' which store handle dir name where the file will be duplicated.
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var dirName string

func init() {
    fmt.Println("init called")
    duplicateCmd.Flags().StringVarP(&amp;amp;fileExt, "extension", "e", "", "file extension is required")
    duplicateCmd.MarkFlagRequired("extension")
    duplicateCmd.PersistentFlags().StringVarP(&amp;amp;dirName, "dirname", "d", "copied_files", "dir to copie")
    rootCmd.AddCommand(duplicateCmd)

}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We see that the flag -d is not required and has default value copied_files for the dir.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Let's add a new command which prints the version of our app
&lt;/h3&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cobra add version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add version function to version.go file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func version(){
    fmt.Println("v0.1")
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And call it in Run section.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run: func(cmd *cobra.Command, args []string) { fmt.Println("version called") version() },
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Summary and conclusion
&lt;/h2&gt;

&lt;p&gt;I have decided to use the Cobra package since it is really easy to integrate it with the base code of any application. The best in Cobra package is that it organizes commands into dedicated command file ie. duplicate.go The package also auto-generate man pages for your command. I see big potential in this package.&lt;/p&gt;

&lt;p&gt;Are you still hungry to get to know better as many programming languages as you can? Wonderful, as we have a comparison of two very popular ones prepared for you! Ruby vs PHP - which one will win the ultimate battle for the developer's heart?&lt;/p&gt;

&lt;p&gt;This post has been originally published on a &lt;a href="//railwaymen.org"&gt;Railwaymen&lt;/a&gt; blog &lt;a href="https://blog.railwaymen.org/golang-tutorial-how-to-implement-cli-app-in-4-steps-using-cobra-library"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>go</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Ruby on Rails vs Laravel: Which One is Better for App Development? </title>
      <dc:creator>Iza Rokita</dc:creator>
      <pubDate>Wed, 19 Feb 2020 16:28:39 +0000</pubDate>
      <link>https://dev.to/railwaymen/ruby-on-rails-vs-laravel-which-one-is-better-for-app-development-4977</link>
      <guid>https://dev.to/railwaymen/ruby-on-rails-vs-laravel-which-one-is-better-for-app-development-4977</guid>
      <description>&lt;p&gt;When you are looking for a software development partner for your app idea you obviously want to make sure, that your product will be developed in the best technology possible.&lt;/p&gt;

&lt;p&gt;But that’s the thing - there is no way of determining which one is “the best”, before hearing out about what you want to develop in detail. Sure, you can rely on languages and frameworks popularity statistics, ask the Redditors or choose the same stack, that your competition use but it’s not going to give you 100 % confidence, that you’ve chosen well. But it doesn’t mean, that you can’t get really, really close to that level of confidence!&lt;/p&gt;

&lt;p&gt;As we sorted that out, it’s time to dive into Ruby on Rails and Laravel application examples and a bunch of other Infos, that will help you to take well-educated decisions when it comes to your app development idea.&lt;/p&gt;

&lt;p&gt;What is the difference between a framework and programming language?&lt;/p&gt;

&lt;p&gt;First come first, as there is still a lot of confusion between what’s the difference between a framework and programming language. A simple explanation is that frameworks themselves are written in a programming language. For example, C# is a programming language. Microsoft built the .NET Framework in C# so that developers can build C# applications much more quickly than if they had to create everything from scratch.&lt;/p&gt;

&lt;p&gt;When it comes to Ruby on Rails framework, Ruby is the language behind it. Other examples of Ruby frameworks are Sinatra, Padrino, and Cuba. The same goes for Laravel, which is written in PHP. CodeIgniter, Symfony, and CakePHP are other frameworks written in this language.&lt;/p&gt;

&lt;p&gt;Ruby vs PHP: Similarities and Differences&lt;/p&gt;

&lt;p&gt;Let’s take a quick look at what are the differences and similarities between both of those languages from a developer's point of view. Even though it is not crucial for you as an entrepreneur, it may be helpful for your company CTO to see some comparison between those two programming languages. For more specific info on this matter, go read our article Ruby vs. PHP - Which One Is Right for Your Project?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p-nW3Kok--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zdziohmvfkt47pgke6b8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p-nW3Kok--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zdziohmvfkt47pgke6b8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ruby on Rails vs Laravel: frameworks introduction&lt;br&gt;
When it comes to both of these frameworks, they are the most popular ones both for Ruby and PHP. Yet they vary greatly when it comes to maturity, community and other aspects, that can determine your project success.&lt;/p&gt;

&lt;p&gt;Ruby on Rails first version was published in 2004 by David Heinemeier Hansson and is currently available as version 6. It began as a side-project and a way to improve the development process in Basecamp startup. Being quite an old framework, is, in fact, an advantage for Rails. It has one of the biggest communities, stable, secure and up to date mature technology. Other apps developed in RoR examples are GitHub, Netflix or Shopify.&lt;/p&gt;

&lt;p&gt;Laravel is much younger as it was released in 2011 - this PHP based framework advertises itself as a “framework for Web Artisans” and for “people who love beautiful code”. As this framework doesn’t have so rich and long history as RoR, it’s harder to mention some big brand websites built in Laravel, but you can see some of the examples here.&lt;/p&gt;

&lt;p&gt;Ruby on Rails vs Laravel: when to choose which?&lt;br&gt;
Let’s get down to the essence of this article, shall we? Find below some examples of apps and products, that are better to develop in Ruby on Rails vs Laravel.&lt;/p&gt;

&lt;p&gt;You should choose Ruby on Rails vs Laravel for your project development if…&lt;/p&gt;

&lt;p&gt;… you need a regular web application - RoR is a good solution for regular web applications. If you don’t expect millions of users and huge traffic then Ruby on Rails vs Laravel may be the right choice for you! It is a proven and reliable technology that powers many applications regardless of its downsides.&lt;/p&gt;

&lt;p&gt;… you’re building an e-commerce solution - a huge, e-commerce giant Shopify is powered by Ruby on Rails, so that sorts it out. Let’s not forget about Spree Commerce as a RoR e-commerce alternative. Gems available in Ruby on Rails will help you to implement every e-commerce feature that you could ever need. Thanks to RoR, you will also be able to det your store up and running very fast. Gems will enable you to set up your payment gateway, marketing emailing campaign, a help desk and many more.&lt;/p&gt;

&lt;p&gt;… you don’t have a fixed app concept - one of the most important advantages of building your application with Ruby on Rails vs Laravel is that you don’t need to have everything sorted out from the very beginning. Instead, you can add more features as the development goes. It’s one of the reasons Rails is so popular among SMEs owners.&lt;/p&gt;

&lt;p&gt;… you need a MVP right away, to validate your app idea - another crucial advantage of Ruby on Rails vs Laravel - it’s awesome for prototyping. Bare-bones features and usabilities can be developed in an extremely short time. Creating an MVP will show you what your users want and what your focus should be.&lt;/p&gt;

&lt;p&gt;You should choose Laravel vs Ruby on Rails for your project development if…&lt;/p&gt;

&lt;p&gt;… you are creating another Twitter or Facebook with millions of calls per minute - Laravel can handle way more requests per sec than Rails. And it’s generally more efficient in concurrency. The question is, will your project ever be so overwhelmed that choosing the right framework will have a significant impact here?&lt;/p&gt;

&lt;p&gt;… you have problems with finding reliable Ruby on Rails developers - as there are more PHP developers worldwide than Ruby, it may be easier to find devs ready to develop your product in Laravel. Unless you decide to follow some advices from this article, that may help you with hiring good, and talented Ruby on Rails developers.&lt;/p&gt;

&lt;p&gt;Railwaymen developers point of view&lt;br&gt;
We've decided to ask our programmers, what are their opinions about those two competing frameworks. You can see their answers below!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y3gclLO4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/38rit0tafdkykgj7epcr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y3gclLO4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/38rit0tafdkykgj7epcr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--382wVfEb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ar63od84jr9zyw6dr6af.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--382wVfEb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ar63od84jr9zyw6dr6af.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;To summarize, there is no better or worse framework when it comes to app development. Truth be told, a much more important matter is the specific development team that you’ll decide on. An experienced developer is able to do real magic even in a very demanding environment, in opposite to the beginner, who will flop the minute the first obstacles appear. And the team consisting of those experienced developers, project managers and UX designers - will help you to choose the right technology stack during the &lt;a href="https://blog.railwaymen.org/why-a-discovery-phase-is-a-must-have-for-your-project"&gt;Discovery Phase&lt;/a&gt; of your project.&lt;/p&gt;

&lt;p&gt;So if you are thinking about making your own custom software and consider things like whether you should develop it in Ruby on Rails vs Laravel - just stop. And ask yourself a completely different question: who would be better at determining, which framework is better in my specific case - me, people from the Internet or a software partner, who developed hundreds of apps within the past few years? I will leave the answer to you.&lt;/p&gt;

&lt;p&gt;Interested in other news from the tech world? Progressive Web Apps are a hot topic lately - especially, as they can keep the users inside the app longer, which every app owner wants. &lt;/p&gt;

&lt;p&gt;This post has been originally published on a &lt;a href="//railwaymen.org"&gt;Railwaymen&lt;/a&gt; blog &lt;a href="https://blog.railwaymen.org/ruby-on-rails-vs-laravel-which-one-is-better-for-app-development"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>rails</category>
      <category>laravel</category>
      <category>appdevelopment</category>
      <category>software</category>
    </item>
  </channel>
</rss>
