Yegor Bugayenko's Blog, page 14

September 4, 2018

Monolithic Repos Are Evil

We all keep our code in Git version control repositories. The question is whether we should create a new repository for each new module or try to keep as much as possible in a single so called "monolithic" repo. Market leaders, like Facebook and Google, advocate the second approach. I believe they are wrong.

[image error]Funny Games (2007) by Michael Haneke

Let's use the following JavaScript function as an example. It downloads a JSON document from a Zold node (using jQuery) and places part...

 •  0 comments  •  flag
Share on Twitter
Published on September 04, 2018 17:00

August 28, 2018

Soft Skills Demystified

There are tech skills and there are soft skills. Every programmer knows that. Tech skills are about algorithms, operators, classes, objects, and everything else they teach us in tech schools. Soft skills are about something else. What exactly? Difficult to say. Let's try clear the air.

[image error]Glengarry Glen Ross (1992) by James Foley

Here is a non-exhaustive list of soft skills I managed to find on the Net1, 2, 3, 4, 5, 6: empathy, open-mindedness, a willingness to learn, effective communicatio...

 •  0 comments  •  flag
Share on Twitter
Published on August 28, 2018 17:00

August 21, 2018

Builders and Manipulators

Here is a simple principle for naming methods in OOP, which I'm trying to follow in my code: it's a verb if it manipulates, it's a noun if it builds. That's it. Nothing in between. Methods like saveFile() or getTitle() don't fit and must be renamed and refactored. Moreover, methods that "manipulate" must always return void, for example print() or save(). Let me explain.

[image error]The Night Of (2016) by Richard Price et al.

First, I have to say that this idea is very simil...

 •  0 comments  •  flag
Share on Twitter
Published on August 21, 2018 17:00

August 13, 2018

70/70

A few days ago, a friend of mine asked me to join him in a new startup. He said that he needed a partner, to help him partially finance the project, promote it, bring in new ideas, and push the business forward. I liked the business idea and wanted to participate. I started to ask questions about our future partnership and attempted to draw a simple partnership agreement. He quickly got offended. He said that he was looking for a real partner, who would share his goals and would never require...

 •  0 comments  •  flag
Share on Twitter
Published on August 13, 2018 17:00

July 23, 2018

Either Bugs or Pull Requests ��� or You Are Out

Here is how it goes, over and over again. I find a new developer for one of my projects managed by Zerocracy. He claims to be an expert with 10 years of hands-on coding experience, $60 hourly rate (we don't hire US guys), and fluent English. Then he joins the project and attempts to close a few tickets. But he hardly can. For many reasons. Then he comes back and explains why our microtasking methodology doesn't work, trying to convince me that I have to pay him per hour, instead of pe...

 •  0 comments  •  flag
Share on Twitter
Published on July 23, 2018 17:00

Either Bugs or Pull Requests

Here is how it goes, over and over again. I find a new developer for one of my projects managed by Zerocracy. He claims to be an expert with 10 years of hands-on coding experience, $60 hourly rate (we don't hire US guys), and fluent English. Then he joins the project and attempts to close a few tickets. But he hardly can. For many reasons. Then he comes back and explains why our microtasking methodology doesn't work, trying to convince me that I have to pay him per hour, instead of pe...

 •  0 comments  •  flag
Share on Twitter
Published on July 23, 2018 17:00

July 2, 2018

What���s Wrong With Global Variables?

Only lazy people haven't written already about how global variables are evil. It started in 1973 when W. Wulf et al. claimed that "the non-local variable is a major contributing factor in programs which are difficult to understand." Since then, many other reasons where suggested to convince programmers to stop using global variables. I think I read them all, but didn't find the one that bothers me most of all: composability. In a nutshell, global variables make code dif...

 •  0 comments  •  flag
Share on Twitter
Published on July 02, 2018 17:00

June 25, 2018

Are You an Architect?

Over twenty five years ago, in 1992, at an OOPSLA workshop in Vancouver, Kent Beck, in answer to the question "What is an architect?" said, according to Philippe Kruchten, that it is "a new pompous title that programmers demand to have on their business cards to justify their sumptuous emoluments." Not much has changed since then. There is a big difference between a smart programmer and a project architect. Here is a list of traits that, I believe, a good architect has.

[image error]N...
1 like ·   •  0 comments  •  flag
Share on Twitter
Published on June 25, 2018 17:00

June 18, 2018

Simplified GitHub Login for a Ruby Web App

You know what OAuth login is, right? It's when your users click "login" and get redirected to Facebook, Twitter, Google, or some other website which then identifies them. Then they go back to your website and you know who they are. It's very convenient for them. It's convenient for you too, since you don't need to implement the login functionality and don't need to keep their credentials in a database. I created a simple Ruby gem to simplify this operation for Gi...

 •  0 comments  •  flag
Share on Twitter
Published on June 18, 2018 17:00

May 28, 2018

Object Validation: to Defer or Not?

I said earlier that constructors must be code-free and do nothing aside from attribute initialization. Since then, the most frequently asked question is: What about validation of arguments? If they are "broken," what is the point of creating an object in an "invalid" state? Such an object will fail later, at an unexpected moment. Isn't it better to throw an exception at the very moment of instantiation? To fail fast, so to speak? Here is what I think.

[image error]Punching the Cl...
 •  0 comments  •  flag
Share on Twitter
Published on May 28, 2018 17:00