Destiny of a Software Engineer

Guys,

For those, who have watched Stargate Universe, I’ll remind the ship called Destiny. In the series, humans from Earth find a new way to dial a Stargate, using nine chevrons. The experiment gets sabotaged by a rogue group and an unfortunate group of people become a crew of a starship. The starship appears to be an Ancient-built one, and the crew have no idea about how to operate it. They explore the ship, by pressing random buttons, switching random knobs and opening random doors. There are some smart guys who can read and understand the Ancient language on the ship. But, two years pass until these guys can find out the ways to operate the ship.

How is this related with a software engineer?

destiny

Well, I found a relation.

One month ago, the company I work has “invented” a new job for us. They gathered a group of hardcore Java developers and put them into a Microsoft Sharepoint project! One of the Java developers is me, and my only Microsoft related experience is reading one chapter of a C# book (for dummies). The most interesting part is that, the managers want us to complete this project in two months!

Bullshit!

Any reasonable engineer should understand that driving hardcore Java developers into a Sharepoint project has no point in it. It is highly possible that the project will be a “Shamepoint” project. But, even telling this fact to the managers is a crime.

Now, we are touching buttons, switching knobs on Sharepoint admin panel. We can not even find a setting one day after we switched it on or off. We are trying to find our way throug undocumented APIs. We are really struggling for survival.

The destiny of a software engineer is being drawn with a very unfortunate project. Hope it does not end prematurely like Stargate Universe finale.

Advertisements

The Dark Side

I’ve got a computer since year 2000. I did not have any idea about the Y2K problem, or anything about computers. It was just a big, powerful and bright game machine for me. It was a Pentium-III machine, and Windows 98 SE was installed on it. Yeah, that seems antique now, but it was one of the price/performance mongers. I played many games with it, and most of it, it was my first tool for programming.

Yes, I wrote my first piece of code back in 2000, while I was at high school. My friend found a QBasic programming book and its compiler. Later, I learned most of Windows applications were written in varieties of Basic, especially Visual Basic. I was thinking that, computers were built with Windows, and there were no other operating systems. I was hearing something called Unix, but it seemed like it was being used in spacecraft only. Since I had only Windows chance, I was trying to learn Microsoft tools.

One year later, I entered university, computer engineering department. During one-year English preparation, I had a chance to improve my programming, but QBasic was very primitive. Web programming was rising, and the easiest web programming tool was PHP and MySQL. Although I was not very fond of database programming, I focused on PHP. I also first noticed that there were other web browsers than Internet Explorer. I discovered Mozilla. At that time, Windows XP was released. Some of you might remember, Windows XP had an application pre-installed: MSN Explorer. That was something like Internet Explorer, MSN Messenger and Outlook Express combined together. I tried, actually forced, myself to use that application, but it did not fit on me. Yes, for the first time, I was thinking that Microsoft was not the only way. Being at university, and an open-source fanatic one, I was discovering a new world. With some luck, one of the computer magazines gave free Linux CDs (SuSE 7.1). That was a good chance for me, I installed it alongside Windows. That was a bad experience, I almost lost almost all of my personal files, music and so on. I blamed Linux and re-installed Windows XP. Then installed my games.

microsoft

At the university, we had to code our homeworks in C, and it should have be compiled on GNU C Compiler. I had to make Linux run on my machine now. I tried several distros, and finally decided on Mandrake (R.I.P.). At the same time, Microsoft published .net and established a partnership with the department. One day, we received our C# books, each one signed to our names. Wouw, that was cool. I have the book, so why not I learn C# and .net? In the summer holiday, I installed the development environment and began reading the book. The first chapter was easy, I printed the infamous “Hello World!” to the console. That’s all. I was somewhat familiar with Microsoft help documents (Windows F1), which were always for dummies. Hey, Microsoft buddy, remember, you sent that book to an engineer candidate, right? Please do not repeat how to delete a file in each chapter! I got bored with the book, and, frankly, .net did not seem interesting to me.

After learning several programming languages in school, I finally discovered Java. Java was simple, intuitive and free. I could code web and my TV with Java! And, Java was, beyond the simplicity, really big. Everyday I learned new about Java. I loved Java.

Nowadays, my company has taken a different path on product platform. The stakeholders have agreed with Microsoft, and almost half of the developer team – including me – has been forced to work on Microsoft products. This is, not writing C# code or aspx files. We are working on Sharepoint 2013 and Office 365! What I have learned in two weeks is, there is no work for engineers in Sharepoint. Newbie developers or Microsoft certified non-engineers can do the work. Oh, I forgot, old Microsoft sales “engineers”, who have sold their souls to the Microsoft monopoly can be the “advisor” and earn your whole monthly salary in one day, by telling you stories.

The Dark Side is taking me in. I am not motivated, I do not love the job. I know myself, I will not be motivated for any Microsoft technology. So my decision is set, I will not ruin my career in this path. I’ll not sell my soul.

Java Exception Definitions

Guys,

I’ve come accross to a link on the internet where a good guy has given good explanations to most common Java exceptions.

Java Logo

Here are some that I like:

IllegalMonitorStateException
Please turn your computer screen back on.
 
InstantiationException
Not everything can happen instantly. Please be more patient.
 
MissingResourceException
You are too poor to be using Java. Switch to a cheaper language (such as Whitespace, Shakespeare, Cow, Spaghetti or C#).
 
HeadlessException
Java thinks you are too stupid to be a programmer.
 
IntrospectionException
You are too introverted. Be more extroverted. Stop being such a nerd and go out and meet some people!
 
BindException
Java programming and bondage don’t mix.

Read the rest here:

http://www.dzone.com/links/r/explanations_to_common_java_exceptions.html

Code for Future

We all code. We all try to catch up the deadlines. Our future is the deadline, after the project is completed, we don’t care about the code. Some of us even quit the job when the coding is completed, and leave a crap behind us.

Why?

Let me put at first,  I am writing about coders who work for a company. Open-source and freelance coders are always more disciplined.

Highly organized companies usually have a guideline. They teach how to write code, down to the bracket placing and wording in the comments. However, they are few, and most of us are not lucky enough to work in those. The rest of the companies, on the other side, don’t follow any. Each coder has its own way, so, on a big project, even the shape of the code reveals who wrote it.

What am I talking about? Today, I read a blog post, which says that Java does not require a rewrite, but patching. Because, the existing code has stood the test of the time, rewriting would introduce solved problems again. So why not our code do the same? Why do we code for deadline?

The main weight is on the shoulders of project managers and product owners. They usually don’t come from a coding background and push new features even the schedule is already overloaded. So, the coders just “code like hell”, with full of commented code blocks, debug codes that write “fuck this project”, javadocs that their existence will do better and unit tests that test the thin air.

Any time to refactor? Yes, we have nights and weekends. And, most of the time, it is us who maintains the code, that means, we fix our own shit.

Even you have a tight schedule, try to code for future. Don’t forget your comments, you may remember why you set that variable now, but believe me, you will forget it six weeks later. Don’t leave any debug codes behind. They are amateur anyway, instead use unit tests. Document what you did, and write as you are telling it to your grandma.

The world changes anytime, and so does your project. Even an internal project can be set up for a delivery, which will reveal all your naked code to outsiders. Good shaped code is like a six-pack, even you are naked, you will not feel shame.

Just, code for future.

Is Eclipse Too Slow Switching Tabs?

Eclipse Juno is alive for some time, but developers are too hesitant switching to it. This is because, Juno seems to be a worse selection in the terms of performance. Yes, Eclipse Juno is too slow switching tabs, especially if open editors are JSP and XML editors. After one hour of working, JSP and XML editors take more than 10 seconds while switcing.

This issue has been reported to Eclipse developers, and they have taken care of it. In the upcoming Kepler release (scheduled to June 2013), the issue will be fixed.

So, what? Shall we wait until then, and continue using Indigo? Absolutely not, the developers have also taken care of that. As can be followed here, there is a patch about that. Just add the following line to the “Update Sites” list and install the Juno SR1 Optimizations.

Godspeed!

Make Windows Forget Network Share Passwords

If you are using Windows, you probably have connected to a network share using a different credentials than yours. Usually, Samba shares require such passwords, at least our network admins do so. For a single connection, single share and single credentials, you probably do not have any problems. However, if you are connecting to the same server using different credentials, for example, on a network share we have music and video shares, as \\samba-server\music and \\samba-server\videos, you will probably have problems. The second connection can not be established, even all the user name and password are correct.

Terminal

This is because Windows caches the network share passwords and tries to use the same credentials for the connections to the same server. The only solution I was using was to log-off and log-on. However, there is a command line solution for this.

To force Windows forget all network share passwords, use:

$> net use * /delete /yes

To force Windows forget passwords for a single server, use:

$> net use \\<samba-server> /delete /yes

To force Windows forget passwords for a single share, use:

$> net use \\<samba-server>\share /delete /yes

Hope this works for you.

Being the Second Guy in the Team, Like Riker

I have been working in the software industry for more than 6 years. All these years have been spent on the same company, same team. At first, the team was very small, not more that 7 people at its peak. I was the natural newbie at the beginning, doing all the hard work to late hours, accepting the team leader’s orders at 5:55 PM each day. The team has evolved since then, all the senior guys except the team leader have left the company, but no experienced guys were employed. This resulted in me being the second guy in the team. As in the military title, I became the “First Officer”.

Actually, this is not an official title. Being a Star Trek fan (trekkie), I made it up myself. The team is believed to be a “democratic” one, meaning that except the team leader, everyone has the same title. Now, we have more than twenty people in the team, except one, we all have the title “Software Engineer”. No official seniors, no official sub-leaders. Each one is assumed to assume some responsibility, but no one is given the power. Operations go like we have assumed power on our assumed responsibilites anyway. As being the de-facto first officer, I am usually considered as having great powers, even giving decisions on the absence of the team leader.

As I caught myself in this role, I somehow got Commander Riker as my role model. For non-trekkies, Commander William Riker is a fictional character in the Star Trek: The Next Generation series. He is the first officer to the starship Enterprise, where Jean-Luc Picard is sitting on the captain’s chair. The Enterprise has gone through several hard missions, as our team did. They have survived many no-win scenarios, so did our team.

riker-and-pickard

Commander Riker and Captain Pickard

In fact, Commander Riker is well capable of taking command of his own ship, and has been offered several times in the series. However, for the seven years, he has not left the Enterprise and his captain. Captain Pickard, although always having the right for the final word, always trusted in Riker, and allowed him to take the lead in many occasions. Most noticably, as a standard Starfleet procedure, Riker almost always took the leadership of the away missions. He had the responsibility and rights for the crew operations.

For almost seven years, I have not left the team, and my captain. Though, I did not have the rights and responsibilities as Riker had, I kept my loyalty. Now, I feel being capable of commanding my own team, my own ship. I am on the verge of making a big decision now. Either I will leave my team, my company and find a position as a software team leader, or I will stay as the unofficial first officer, and always the second guy.

Update: found this meme, better explaining the situation:

William Riker meme

William Riker meme