RSS

Category Archives: Misc

Software Gardening: Beyond Craftsmanship

Episode 55

In the past I wrote quite a lot about the nature of software developer. There was a comparison to scientist, then engineer, martial artist and finally to something based on medieval craftsman, who combines all three to an extent. However, some time ago I’ve encountered yet another metaphor for our profession that felt quite appealing.

little_gardener_by_irina_ponochevnaya-d9qc7m0

It’s the Software Gardener. The person that works not on an inanimate object, but on living, organic ecosystem that is constantly changing in unpredictable ways, and depends greatly on environmental factors. Let’s see what it’s all about.

Birds Are Chirping About the Gardener

The metaphor is not that common. I sit quite a lot on LinkedIn (probably more than typical software developer does and should) and I recall only one person that called herself that. Google finds about 5k results on “software gardener”, not much compared to 159k on “software craftsman”, 33M on “software developer” or 44M on “software engineer”. While the parallel to software craftsmanship was first drawn in 1992 by Jack Reeves, the parallel to gardening is not that young either. Read the rest of this entry »

 
Leave a comment

Posted by on February 2, 2017 in Misc

 

Tags: ,

Seniority in Programming: Part Two

Episode 44

Last week, in part one of this article, I was pondering about levels of competence in general and in software development. I looked at mainstream naming schemas, recalled metaphor to medieval craftsmanship, described ranks in Japanese martial arts, presented SFIA skill framework and finally ability’s dots in role-playing game system. Now, let’s try to do something with it. How much levels do we actually want? Well, let’s have four.

junior.jpgApprentice

  • HR would call it junior developer
  • Sensei would call it 5th to 4rd kyu
  • SFIA would call it level 2 to 3, the one who assists and applies
  • VtM handbook would call it 2 dots, the practitioner

We all have to start somewhere. I’m assuming that this is how we should call a person that begins professional career in software development, and has knowledge usually associated with at least bachelor degree in computer science or closely related field. Apprentice has some theoretical grasp and academic experience, but not much, if any, with commercial projects. Why skip 1st level of SFIA and 1st dot in VtM handbook? Because to be employed as junior developer, you have to know quite a lot. It’s not like random person from the street can get the job and do well after some on-site training. It’s not a damn factory. One need to understand some basics of computer science, and be able to code something. I’m not saying academic degree is a must, because many prominent programmers don’t have one, but some knowledge in the field is a Read the rest of this entry »

 
2 Comments

Posted by on November 17, 2016 in Misc, Recruitment

 

Tags: , , , ,

A Brief History of Java and Vampires

Episode 42

As you may have noticed, my focus in this blog is shifting away from Java itself to more general topics related to software development, despite having “Java” word in the blog name. Well, two months ago I even changed the name from JEE to Java, because I felt JEE was too specific. Let’s get back to roots and explore a bit of history of the Java platform.

As a Halloween guest stars, the article will feature the story of creatures of the darkness, as portrayed in role-playing game Vampire the Masquerade. Lets look at their hierarchy, from oldest to youngest.

Antediluvians4262393-dracula-untold-master-vampire

Said to be vampires of incalculable power, each of whom survived the Biblical Deluge. Considered to be the founders of the thirteen clans and members of the third generation.

1990 – In December, Patrick Naughton starts the Stealth Project which will later become what we now know as Java. The aim is to create a platform that will speed up software development and render C++ language and its tools obsolete.

1991 – The Green Project is the new name of the platform, James Gosling and Mike Sheridan are also on the team, which now consist of 13 people in total. Gosling starts the work on the core platform language, then called the Oak.

1992 – First internal demonstration of the platform. Duke, the future Java mascot makes first appearance. Read the rest of this entry »

 
2 Comments

Posted by on October 31, 2016 in Misc, Technology

 

Tags: , ,

Why work for a software company?

Episode 37

When I was looking for a new job recently, I had a strong resolution, that I’m going to work for a company that is doing software. Not telecommunication equipment that requires software. Not financial products that require software. Not trucks that require software. I wanted a company, that does the damn software for a living. And I will tell you why.

Case one: Technology Corporation

800px-base_transceiver_stationIt’s not bad, could be worse. Companies that focus on technology usually have some kind of understanding for engineers. Usually. There is the corporate aspect though with all the bureaucratic nonsense. The bigger the company is the more problematic the aspect of scale becomes. Some people are allergic to presence of nonsense, and probability dictates, that with scale, at some point you will encounter the nonsense and might get frustrated.

The urban legend says, there is a quarter million Euro device rusting on the shelf in a lab. It’s needed, but no one knows how to turn it on. The one competent guy who knew left the company because he was unable to get a hundred Euro rise. We can’t rehire him for a year because of policy. Meanwhile new people straight from university are paid more than that  competent guy who left, because Read the rest of this entry »

 
6 Comments

Posted by on September 29, 2016 in Misc, Recruitment

 

Tags: ,

Good commit message

Episode 36

Last time we talked about version control, so let’s elaborate a bit on that. One of the aspects of using version control is the possibility of commenting on changes you do in the code. Actually, it shouldn’t be only the possibility, it should be a necessity.

The Template

Git documentation provides a standard template and guidelines for commit message, let’s have a look.

Capitalized, short (50 chars or less) summary

More detailed explanatory text, if necessary.  Wrap it to about 72 characters or so.  In some contexts, the first line is treated as the subject of an email and the rest of the text as the body.  The blank line separating the summary from the body is critical (unless you omit the body entirely); tools like rebase can get confused if you run thetwo together.

Write your commit message in the imperative: “Fix bug” and not “Fixed bug” or “Fixes bug.”  This convention matches up with commit messages generated by commands like git merge and git revert.

Further paragraphs come after blank lines.

– Bullet points are okay, too

– Typically a hyphen or asterisk is used for the bullet, followed by a single space, with blank lines in between, but conventions vary here

The News

The most important question to be answered by the commit message, is Read the rest of this entry »

 
Leave a comment

Posted by on September 22, 2016 in Misc, Technology

 

Tags: , , ,

The Pomodoro Technique

Episode 32

          I was recently attending a talk about planning stuff, and one of the aspects of it was an introduction to time management method called The Pomodoro Technique.  I’ve decide to try it myself and share some insights here.

The Idea

                The idea is simple and involves a timer and some discipline.

pomodoro

  • Decide what should be done.
  • Set the timer to 25 minutes, the interval is called a Pomodoro.
  • Work on the task until the timer rings. If you get distracted, just write it down, but get back to the task at hand immediately. Try to shield yourself from any possible distractions as much as possible.
  • Take a short break (3-5 minutes), stand up, walk, get something to drink, do a quick exercise. Anything that is not related to the task and will help you clear your mind. Go to next Pomodoro. Repeat.
  • If you complete four cycles, take a longer break (15-30 min) instead short one. Repeat.

The Execution

                It requires some time to get used to. Especially if you find it difficult to focus on one task and constantly think about dozens different interesting things to do, like me. Before I stumbled upon the Pomodoro, I tried to work in 45-minute focus and 10 min break cycles. Like in school, more or less. However, it actually seems that 25/5 cycle is better for me. I’ve noticed that after longer cycles, I tend to drift away much more, especially towards the end. Also, school is over.

                20160823_161540Besides timing, there is an issue of shielding from distractions. I’m trying to shut down email, social media, phone and all that stuff, put headphones on. What to do if someone comes to your desk in the middle of Pomodoro? Well, it’s up to you.

                As a tool, I’m using tomato-timer. It’s simple and got all that’s needed. There are plenty other pages and a lot of mobile apps, some with fancy statistics, but I didn’t research them. It’s just a damn timer. When I get up from my desk I usually leave my phone, and I haven’t used a wristwatch since high school, so I usually mess the break timing. Before I leave though, I start the break timer on my computer. If it’s still on when I come back, I just mindlessly browse cats or something in the internet or play with radio controlled Lego excavator I keep on my desk. If I come back too late, well… I just hop onto another Pomodoro (shame… shame… shame…).

                Using timer has also an additional advantage. You don’t have to check the time periodically and think about whether you should take a break or not, asses your mental fatigue level, decide if you are in a good place to pause and all that stuff. When you hear the Pomodoro rings, just finish your current thought, line of code, sentence, or whatever you got there, set a break timer and get up. Or just leave everything and get up immediately if it works for you.

                In typical office conditions it might be difficult to sustain perfect cycles. There are irregular meetings, there are people that want to ask something in person, there are delivery guys that won’t show up at exact hours. There is The Flow. There are fuckups on production… Just don’t try too hard, remember it’s a tool to help you, not to restrain you.

                Some mentally old people might have objections that the Labor Code (at least in Poland) states that you should work 55 min and then you got 5 min break. Yeah, that might apply to a factory, not to software development. If your manager would make you fuss about that, tell him he should manage factory workers not programmers. Any smart company would understand that it’s just a number on a paper that HR has to keep signed in a binder, and we are here to get the shit done efficiently, not to sit at the desk for a given number of minutes a day. And, remind me, why would you want to work for a dumb company?

The Retrospective

                stay_focusedPomodoro works for me. Perhaps, to some extent, it’s a placebo to help you focus. You might think somewhere around “Damn I’m using a legitimate time management technique that has a name, so I should ignore this Facebook notification and keep working until the timer tells me to stop”. Intervals? People are different, some can focus for more than 40 minutes, but most probably can’t. Where is the efficiency threshold? I guess it requires some experimenting and might be difficult to measure. 25 minutes seems fine. Go ahead, try the Pomodoro. It’s healthy.

toothless-wallpaper-25

 
3 Comments

Posted by on August 25, 2016 in Misc

 

Tags: ,

Software Developer Interview: Your part.

Episode 29

            Now you will ask questions. Lots of them.

            As I have mentioned in the previous article, job interview is a symmetrical process. There are two entities – the Company and the Developer that meet in order to find out if they want to start a collaboration. The company will try to check if you have suitable skills, talents and how you handle different situations. They will ask you tons of questions. And you should do the same – carefully and thoroughly find out if the are suitable for you in each aspect you care about. Basically, you should have the same amount of time for your questions, as they had for theirs. Symmetry and honesty.

Project

            When you have technical people in front of you, ask them as much as you can about the project you are going to participate in.

  • High level business overview as seen by developer.
  • Technical overview.
  • Technology stack and plans for it.
  • Legacy problems, and if present, how do they deal with them.
  • Software development process: do they have Agile? Scrum? Scrum-but? Waterfall?
  • Do they have Continuous Integration? Automatic tests? Deployment at the push of the button?
  • How do they host their stuff?
  • How big is the project? How old is the code and how many people worked on it?
  • What tools do they typically use? What IDE? Can you use your favorite IDE and tools?
  • Will you have the level of autonomy you want?

Read the rest of this entry »

 
6 Comments

Posted by on August 4, 2016 in Misc, Recruitment

 

Tags:

Software developer interview questions: The soft part

Episode 28

            Soft is not a short from software here. In the previous article we went through technical aspects of Java developer job interview. This time we are going to explore the non-technical part or soft part or HR part or however you want to call it (it’s not just Java developer now, of course, but software developer in general). Sometimes you will talk with your potential team leader, project manager, line manager, other kind of manager, someone from human resources department or just a guy from dev team (hey, they can talk too!). They will try to find out if you will fit the organization, project or, in general, if you are the guy they would like to work with. I feel that developers tend to trivialize this part and think that if they are technically strong, nothing can stop them. However soft skills and personality plays a decent role in the recruitment process. After all, no one wants to work with an asshole, even if it’s technically brilliant asshole.

Up to the point

            So, I’m going to try to recollect these types of questions I’ve been asked on my recent interviews. As before, I’m not going to answer them, partly because I’m lazy and partly because Read the rest of this entry »

 
2 Comments

Posted by on July 28, 2016 in Misc, Recruitment

 

Tags: ,

Java developer interview questions: The hard part

Episode 27

            Since I’ve attended several job interviews recently, I’ve decided to share some experience with you. Why hard part? Because this article is going to be about technical stuff. I’m going to write something about soft part later. Technical interview will probably look a bit different depending on your programming background. If you are new, expect more core language / programming questions. Later on emphasis probably shifts more towards your actual work experience, technologies, frameworks and practical problem solving skills. I’m not going to answer questions (I’m lazy), just provide list of topics you might want to review if you are going to a Java interview.

General object oriented programming / design core

  • Explain polymorphism, encapsulation, cohesion, coupling.
  • Difference between inheritance and aggregation.
  • What does “clean code” and “technical debt” mean to you?
  • Describe some refactoring techniques.
  • Explain SOLID principles.
  • Other principles like KISS, DRY, YAGNI, law of Demeter etc.
  • What design patterns do you know, explain some.
  • What design anti-patterns do you know?
  • How would you design an amphibious vessel / math expression evaluator / a dragon?
  • What sorting algorithms do you know and what’s their computational complexity? Which would you choose having some knowledge about the data you are given?
  • Write a code that:
    • calculates a factorial of given number
    • does a Fizz Buzz
    • inverts order of letters in words of given sentence.
    • checks if given string is a palindrome.
    • enumerates all permutations / variations of given set of characters

Read the rest of this entry »

 
1 Comment

Posted by on July 14, 2016 in Misc, Recruitment, Technology

 

Tags: ,