RSS

Category Archives: Technology

Enterprise Technologies

Craftsmanship, Science, Engineering and Art

Episode 45

As you might have noticed, if you read my blog for some time, I like the parallel between modern software development and medieval craftsmanship. I used it recently when talking about seniority in programming along with other measures. I did reviews of two books on the topic some time ago here and there, but now I would like to devote entire article just to that. To be more specific, I would like to talk about the essence of modern software development and why it’s important to understand this.

6mzd3u4

It will be a bit of a historic tour, we will start from formal beginnings of computer science, and its relation to early programmers. Then we will take a look at spectacular rise and fall of a new engineering discipline. Next comes the art, both as creative endeavor and as philosophy, especially in traditional martial arts. Finally we will arrive at craftsmanship, and Read the rest of this entry »

 
Leave a comment

Posted by on November 24, 2016 in Technology

 

Tags: , , , ,

Seniority in Programming: Part One

Episode 43

While browsing job offers in software development, you can often encounter words like “junior”, “middle”, “regular”, “senior”, “lead” or “principal”. What do they actually mean? Correct answer, as usual, is: it depends. The idea of job grades, pay grades, tiers or seniority levels seems to be quite subjective, depending on job market situation, country, company, technology and if HR people have a good day or not. Let’s explore the subject and try to find some answers. I will reach for some metaphors and analogies to help with this endeavor.

Assuming that software development is a single monolithic skill, which is a thick approximation, we can ask an essential question – how to grade one’s skill. There are quite a few approaches, let’s dive into some of them.

Pay grade

index.jpg

Typical corporate breakdown you can find out there, is “junior” / “middle” / “senior”. Many companies add another level above, usually called “lead”, “principal” or “staff” and sometimes a level below, like “intern”. One corporation had once a Read the rest of this entry »

 
3 Comments

Posted by on November 10, 2016 in Recruitment, Technology

 

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 »

 
3 Comments

Posted by on October 31, 2016 in Misc, Technology

 

Tags: , ,

Pay your debts

Episode 41

I’ve seen recently a nice movie based on actual events – the Deepwater Horizon. Aside from being well made and entertaining, the movie had an additional value to me. It was a story of what happens to a project with insufficient tests and short sighted management putting pressure to release unfinished product with monstrous technical debt. It blows up in huge ball of fire.

dwhepkSocial.jpg

Technical debt

Ward Cunningham coined the term technical debt while working on financial software. The idea is, that when developing software, you can often go in two directions. You can spend more time and implement the new functionality cleanly, soundly and with respect to existing architecture. If the functionality does not Read the rest of this entry »

 
1 Comment

Posted by on October 27, 2016 in Agile, Clean Code, Technology

 

Tags:

Building Microservices

Episode 40

I haven’t written anything in Books category this year, so it’s time to fix this. I have found Building Microservices by Sam Newman when browsing shelf of mini library next to the kitchen in our office, while waiting for my coffee. What caught my attention was a new and shiny book among bunch of uhm… mature ones. Besides, amongst all that noise regarding microservices in the industry, I thought it’s good to read some damn book instead of watching random talks from people shouting, “hey we did microservices in our company too, we are so cool and trendy!”. I like books, I’m old school.

Premise

lrgQuoting the book cover itself:

“Distributed systems have become more fine-grained in the past 10 years, shifting from code-heavy monolithic applications to smaller, self-contained microservices. But developing these systems brings its own set of headaches. With lots of examples and practical advice, this book takes a holistic view of the topics that system architects and administrators must consider when building, managing, and evolving microservice architectures”

Yes, we can hear that everywhere now. You might have an idea that everyone has migrated to microservices or is in the process of it, but it’s bullshit. Most systems I’ve seen recently are nowhere near that, and it doesn’t seem to change anytime soon.  So perhaps it’s good to rant about this on and on, but also investigate the topic a bit further that “hey we have to do this, everyone is doing it, let’s do this!”. There are pros, there are cons and there are Read the rest of this entry »

 
3 Comments

Posted by on October 20, 2016 in Books, Technology

 

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 »

 
1 Comment

Posted by on September 22, 2016 in Misc, Technology

 

Tags: , , ,

Git Intro

Episode 35

Since last time I finally showed you some code and mentioned storing examples on GitHub, let’s talk about underlying version control system and surrounding tools. Many of you probably used SVN as version control, especially if you worked for big corporation which are not that fast at adopting new stuff. Some of you perhaps switched to Git, maybe after leaving the corporation for smaller and smarter company. Well, that would be me right now :)

The System

logomark-orange2x“Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency” says the homepage.

Git is distributed. Everyone has his own copy of the repository on a local machine. You can commit to it and fall back to earlier versions without relying on central server as in SVN. What about the Holy Trunk then? In typical workflow there is a base remote origin repository, where all changes are pulled, acting more or less like the SVN server and source of truth.

Git is fast. Contrary to SVN, each time you change a file, Git creates new snapshot of this file instead of delta between two files and adjusts the commit tree accordingly. This can take up a bit more space, but Read the rest of this entry »

 
2 Comments

Posted by on September 15, 2016 in Technology

 

Tags: , ,

Angular Intro

Episode 34

Talk is cheap. Show me the code.

– Linus Torvalds

          I’ve talked about recruitment and clean code recently, but I haven’t shown you any (or almost any) actual code for some time. Time to fix this. In November 2014 I’ve written articles about GWT and Vaadin. Now I’d like to present you something similar on AngularJS, which seems to be the most popular JavaScript framework nowadays. And despite being JavaScript, it’s actually pretty good. Let’s take a look.

Overview

AngularJS-huge

          Angular is a JavaScript open source front-end, single page, web application framework maintained by Google.

          It provides a standard structure for front-end project part, like GWT, much as Spring provide standard structure for back-end part. Its simplification, because you can do the front-end in Spring too via Spring MVC, and the structure for entire project is also partly defined by Maven or other convention over configuration type build tool, but it’s an idea to start with.

          It is single page framework, also like GWT, meaning Read the rest of this entry »

 
10 Comments

Posted by on September 8, 2016 in News, Spring, Technology

 

Tags: , ,

Embrace the Change

Episode 33

Everything changes and nothing stands still.

-Heraclitus

          Software changes. Technologies change. Build systems change. Deployment environments change. Requirements change. Markets change. Clients change. Some people refuse to change though. How to deal with all that fuss without losing sanity?

Wind of Change

          This week’s episode of How To Train Your Java is hosted outside of the usual place, namely on my company’s tech blog, right here. Enjoy :)

Sweet Sixteen

          By the way, if you happen to be in Wrocław, Poland in four weeks from now and you are not afraid of Polish language, you are welcome to join my talk on principles in object oriented programming. I’ve titled it Sweet Sixteen (since there will be 16 principles). Its free, includes beer and pizza, you just need to sign up on the event page, right here.

          In the next episode I will do something I haven’t done for quite some time. I will show you some actual code. Stay tuned.

embrace the change

 
2 Comments

Posted by on September 1, 2016 in Agile, Sweet Sixteen, Technology

 

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 »

 
4 Comments

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

 

Tags: ,