Archive for October, 2011

The Non-Typical .NET Job

I recently referred to an interesting .NET job as a 'non-typical .NET job'. I hadn't used that term yet up until that point, so I thought that was rather interesting. But what exactly do I mean with 'non-typical .NET job'? It's pretty simple really: a job where you're using .NET technology without blindly following the guidelines, recommendations and software from Microsoft on how to develop software on the .NET platform. It basically means that you'll use whatever you think is most appropriate for what you're trying to do.

The biggest problem in the .NET world is that most companies that do .NET development just stick to what Microsoft tells them to use and how to use it. Many .NET developers largely focus on that, because they know all too well that it increases their odds of getting hired. And let's face it: Microsoft has a solution for practically everything. The only problem is that those solutions are rarely the best in what they're trying to solve. But hey, no manager gets fired for going with Microsoft, right?

The result is that there are too many companies and too many developers that focus only on what Microsoft offers. But there's a lot more to software development than what Microsoft offers, or even knows about. There are countless examples of Microsoft being late to whatever technical party is interesting at the time. And when they show up, they certainly don't always make a good impression.

If you're the kind of developer that likes to learn from what other software development communities are doing, odds are high that you're screwed. There is an interesting OSS community within the .NET world, and they frequently produce great solutions, quite often based on succes stories coming from other development communities. The problem is not that .NET developers don't have great solutions available to them. The problem is that the majority of them simply don't know about them only because there hasn't been any Microsoft hype about it, or that the devs who do know about it aren't allowed to use it because their managers are sceptical about it, most likely also because there's no Microsoft backing for the technology or architectural style that is being proposed.

I'm not advocating the avoidance of Microsoft products or solutions. By all means, use Microsoft products if they are indeed the best solution to your problem. But do be aware of the things that are getting attention outside of the Microsoft sphere and use them when it makes more sense to use them. That's the essence of the 'non-typical .NET job' and that's exactly what makes it interesting: using the right tool for the right job.

Developers Need To Keep Challenging Themselves

7 commentsWritten on October 23rd, 2011 by
Categories: Opinions, work/career

I read a very interesting article about a study on why some people learn faster than others. It's a very interesting read which I highly recommend, but in case you're short on time I'll summarize the most important parts because they're relevant to the subject I want to cover with this post. The study claims that there are 2 types of mindset when it comes to learning:

  • The fixed mindset: People who have this, think that we have a certain amount of intelligence and can't do much to change it. To them, a mistake is a failure, a sign that their capabilities aren't up to the task.
  • The growth mindset: People who have this believe that they can get better at almost everything, as long as they can invest the necessary time and energy. They see mistakes as an essential precursor to knowledge, the engine of education.

Needless to say, people with a growth mindset turned out to be significantly better at learning from their mistakes. The article also covers a very interesting experiment involving school children. The children were given a test, and half of them were told "You must be smart at this". The other half was told "You must have worked really hard". After that, they could choose between 2 new tests. The first one was more difficult, but came with a mention that the students would learn a lot from them. The other test was similar to the test they had just taken.

And here's where it gets really interesting: of the kids that were praised for their effort instead of their intelligence (I'm going to refer to this group as the effort-kids from now on), 90% of them chose the harder test. Of the kids that were praised for their intelligence (I'm going to refer to this group as the intelligence-kids from now on), the majority chose the test that was similar to the one they had just taken. Presumably, to avoid risking a low score after having already been praised for their intelligence. After the second test, all of the kids took the same third test, which was the hardest one so far. The effort-kids worked hard at figuring out the puzzles, while the intelligence-kids were easily discouraged by their mistakes. After the third test, the kids were given the choice to look at the exams of kids that did better than them, or the exams of kids that did worse. The effort-kids generally wanted to look at the exams of the people who did better. The intelligence-kids mostly picked the exams of those who did worse. The final test had the same difficulty level as the initial test. The effort-kids raised their average score by 30%, whereas the intelligence-kids saw their average score drop by 20%.

I find that kinda stuff fascinating. It also kinda confirms what I've seen from fellow developers ever since I graduated and started working. Every good developer I've met isn't afraid to make mistakes and sees mistakes as learning opportunities. These people routinely challenge themselves by learning something new. They also keep an eye on what other people are doing to get better and they actively try to learn from people they consider to be better than them.

One guy I used to work with was considered to be a great developer a few years ago. Now this was the kind of guy who was not only used to being praised for his 'intelligence', but his self-confidence was largely based on it. He once told me his favorite class in high-school was math because the other people in his class thought it was hard, while it was easy for him. He actually said it like that. When other people started getting more attention for their technical skills and knowledge, he began to move away from coding and started focusing more on writing functional analysis documents. He wasn't bad at it, but it wasn't great either. Now he does a little bit of everything from what I've heard. I'm pretty sure that if his self-confidence wasn't based on the praise he gets, he could've been much better at whatever he wanted to do.

That's just one story but I've seen similar things with other people who seemed to be more interested in what other people thought of what they could do as opposed to actually trying to improve on what they can do on a continuous basis. If they start thinking rather highly of themselves because of the praise they get, they often start thinking it's just not necessary anymore to keep working on improving their skills.

Keep challenging yourself. If you think you're pretty good at what you do (and there's nothing wrong with that), make sure you keep searching for new and better ways to do what you do. And when people praise you for being good at what you do, don't let it get to your head because before you know it, you won't be getting much praise at all anymore.

You Need Your Time Off

3 commentsWritten on October 3rd, 2011 by
Categories: life, work/career

One of the hardest parts about being a good developer is trying to keep up with all of the new stuff that comes out. Let's be honest: we all have a list of things that we'd love to learn more about, but we just can't get around to it, right? I'm talking about programming languages, frameworks or libraries, new techniques, new kinds of data storage, architectural styles, or maybe just certain tools like specific editors or whatever. Well, I'm sure you get the point. I have a list like that. And so do you.

Another difficult part is always having a list of things you want to do, or need to do. Implementing that pet project you've had on your mind for a while now. Contributing to some Open Source projects that you're fond of. Accepting pull requests. Writing a blog post about something. There's always something, and you never quite manage to cross off every item on that list. I have a list like that. And so do you.

And you know what? That's ok. You have to accept the fact that between your job and your personal life, there is a limited amount of spare time available to you. And you just can't spend all of it on learning new stuff all the time or working on things that you think are important. Sure, learning is important. And so is taking the time to work on things that matter to you. But what's equally important is giving yourself enough time off to sit back, relax and maybe even do nothing.

I spend about 80 minutes each day on the train. Sometimes I'll read. Sometimes I'll code. And sometimes I just listen to some tunes while I stare out the window, either thinking about nothing or thinking about whatever comes to mind. It's a conscious decision. That's me saying "I just wanna relax right now". Which means I don't even want to think about software development stuff, or blogging, or anything else that I'm supposed to do. On some free evenings I think "damn, I really should do something useful". And on some of those nights, I will. But I'll also consciously choose not to do anything useful from time to time as well. It all kinda depends on how busy I've been in the days leading up to that free evening.

Your brain is like a semi-intelligent battery. It has a limited amount of energy and it can only do so much between charges. It's smart enough to scale down its activity when it's starting to run low, but most of us are too stupid to realize it and we just try to keep going. The result is that whatever we're trying to do, we're not going to do it as well as we think we are. You will have trouble learning new things when you're running low. You certainly won't do your best work when you're running low. In fact, you're likely to do a half-assed job which ironically only increases your workload.

Take care of that battery. Recharge it regularly, and don't think you can get by with minimum recharging. If it doesn't work for your phone, it won't work for you either.

The Competition-Innovation Relationship We All Benefit From

1 Comment »Written on October 2nd, 2011 by
Categories: gadgets, Technology (general)

The other day, a friend of mine made an interesting observation that got me thinking. Here's what she said:

It's weird how much change we've seen in the technology and websites we use in the past 3 years or so, compared to how little change there was in the 5 years before that.

She's not a techie. She's just a normal person who doesn't care about news from the technology world. But she is interested in devices and sites that make her life easier and better. We've all noticed that in an ever increasing way among non-techies in the past few years. If you think about it, it's a pretty big jump from where we were 5 years ago. Back then, the only technology innovations that people heard about were faster CPU's, bigger hard-drives and more memory. And most people didn't really care. The primary reason they bought new technology was because their computers 'got slow' doing the same tasks they once completed fast enough. With the notable exception of Napster (and its derivatives after that), there was nothing really that changed the way people consumed information and media. We didn't like the clunky mobile devices that were available. And while social networks already existed, they weren't as ubiquitous as they are now. For a few years, it seemed like there was hardly any progress in technology apart from the things that only geeks got excited about.

Back then, there was really only one tech-giant that mattered when it came to the consumer market: Microsoft. They were dominant and had little competition in their core markets. They then started to put a lot of resources into entering other markets, which meant they were basically building the same things that other companies were already offering. There were minor innovations, typically limited to small features and integration with other services/products that competing products didn't have. But nothing really substantial, they didn't introduce any game-changers. You could argue that hardware improvements at the time weren't coming along fast enough to create game-changing products, but I'd argue that such improvements largely come from companies that push for the required advancements in order to create the products they've envisioned. I like to compare it to how we were able to put a man on the moon 40 years ago because the space race pushed us ahead, yet we can't even match that feat (let alone exceed it) nowadays because nobody is pushing for it.

Luckily for us, we now live in a time where we're back to multiple tech-giants that matter to consumers. Apple, Google, Amazon, Facebook, Samsung, … they're all creating things that change the way we do things or consume things. They're all competing heavily and as a result, innovating because they simply have to. If they don't innovate, they quickly become irrelevant and that impedes their ability to compete. And if they no longer need to compete, it becomes less important for them to innovate. They'd only need to provide just enough innovation to get their customer base to upgrade regularly. And we, the consumers, would be back to where we were 5 years ago. Getting minor upgrades that slightly improve what we're already doing.

Despite any preferences you may have, you really ought to hope that none of the new tech-giants become as dominant in the areas they're active in as Microsoft used to be. If you're an Apple fan, you should be happy that Google and Samsung are fighting them so hard in the mobile space. If you're a Google fan, you should be happy that Facebook has them worried. If you're a Facebook fan, you should be happy about the changes that Google+ has inspired them to make already. If you're a Microsoft fan, you… well, that probably means your income is dependent on Microsoft's relevance. With the exception of Kinect and XBox, the only people that seem to get excited about Microsoft products are .NET developers, Windows sysadmins and tech journalists that cater to either of the first 2 groups. But the good news is that even Microsoft is being forced to innovate if they want people to buy their products. They can't leverage their Windows monopoly into automatic success in other markets anymore.

As long as none of the tech-giants can get comfortable in their position, we're going to keep benefiting from the competition and the resulting innovations. Just something to keep in mind for fanbois on all sides ;)