Microsoft doesn’t create bad developers, developers do

Have you ever stopped to think about the industry you have choose to work in (I’m bluntly assuming that if you are reading this you are working in the software industry in some way)? I would call it one of the most complex industries in the world. Think about it. We are working in an industry that is evolving at an incredible pace, contains an incalculable number of technologies, frameworks, best practices and constantly redefines the definition of how things should be done in the best possibly way. It’s the industry that makes the rest of the world tick. Daunting really, if you think about it.

A while back I read a couple of posts by Gil Zilberfeld (here and here) where Gil talks about the responsibility that vendors such as Microsoft plays in the role of securing the quality of the work that is produced in our industry. While I think I see the points  Gil is trying to make, I think he misses the beat a bit and I have a hard time agreeing with the conclusions he draws.

The way I see it there are two types of developers; those that are just in it to pay the bills and those that consider themselves as craftsmen. If you consider yourself a craftsman then you should already be aware that you are responsible for your own faith and actions in this industry. But, if you are just in it to pay the bills then you are probably also looking to do so by doing the least amount of work and that includes looking for information on how to solve a particular problem or how to apply a technology onto your stack.

So if you are one of the developers that are only looking towards Microsoft (or the relevant company for the technology stack you are working on) is it their fault if you implement something in a way that could be considered bad? Of course not! Sure there are a lot of outdated and down right poor samples at the Microsoft (or relevant company) website and their idea on how certain things should be solved are bound to differ from others (and that’s definitely not to say that there isn’t good contents, there are a ton of it). However, if you rely on a single source of information, you are always going to get an opinionated view. Take my word on it (right?).

Doctors reads medical journals, publishes research papers, attend conferences, network with colleagues and make sure they stay up to date with the latest in their field. I’m pretty sure you are happy that they spend all of this time to make sure they can provide the best possible care and treatment when someone are in need of their services. I know I am.

Just as with any other profession, developers are responsible for their own education, for honing their skills in the craft that they have chosen to practice. In order to keep up in an industry that evolves at the speed of light you need to invest in yourself. The code you write today should be some of the best you have ever written, while a year later you should be considerably less excited about its quality. It’s a sign of growth. That you’ve continued to move forward as a craftsman, that you skills have been honed and broadened during the past year.

So what about the tools? Do we really rely on them too much to get the work done? I would say, definitely not! But again you have to specify just exactly what you are talking about when talking about tooling. If you rely on visual designers, drag and drop, wizards and the likes to to the majority of your work, then yes you are probably relying too much on your tools. Odds are that you will have a hard time to get anything outside of standard behavior to run and there will be pain points when you need to debug.

However you would do yourself (and your employer) a huge disservice if you did not make it your goal to know the tools in your toolbox as good as possible. What’s wrong with knowing how to use the debugger, the IDE and tools like ReSharper as good as possible? Used correctly they will have a huge impact on productivity. Make sure you know the finer details of the tools and make them work for your and not the other way around. Yes, sometimes tools do get in the way of the goal, even slow you down, and when that is the case, don’t use the tools! Tools are there to help you when you need them, not to act as a crutch you always have to lean on so you don’t fall on your ass.

Well there you have my thoughts on the subject. It’s always up to the developer, not the companies. Always.

I am also around on twitter @thecodejunkie in case you need one more person to follow

11 thoughts on “Microsoft doesn’t create bad developers, developers do

  1. Andreas,

    Interesting posts that spans several important subjects.

    I agree that vendors doesn’t create bad programmers

    There will always be bad, average and great programmers. What makes them different? – is an interesting question. I believe a common denominator for the better programmers are that they really care about their work and take pride in it – they have passion for their work. I believe that passion is the strongest force in becoming a better developer. It’s really hard to become good at something you don’t like.

    I don’t think that the vendors are responsible for teaching a developer to become a better developer. The developers themselves and the organization that they work for is responsible for this. When a junior programmer, or a journeyman if you will, joins a company, he should get proper training and mentoring by the more senior developers. This is the second strongest force in becoming a better developer. The organization should have a culture for learning and sharing.

    Even though the developers are responsible for honing their skills, I do believe the vendors will have some influence on them. A vendor that creates tools to motivate developers to do best practices, such as TDD or separation of concerns, will always have a positive impact. A framework with this kind of motivation will force a developer to think differently about the problems he/she are facing. I’m sure the ASP.NET MVC had a positive impact on the ASP.NET developers that used to implement SQL queries directly in the View. I’m sure it made them think twice about what a View is, and what kind of code they should put in it.

    To say vendors alone create bad developers is just ignorant.

    Thanks for sharing your thoughts!

    Gøran

  2. Developers are responsible, but I question whther the rate at which developers are expected to adopet new ways of doing things actually helps productivity. If Someone has been using Visual Studio 2003 since it came out they would certainly know the finer points of using it to better their proeuctivity. Woodworking Craftsmen spend years refinining there skills which come with familiarity with the tools they use in their craft. They are not expected to relearn how to do their craft on a new set of tools every 2 years. For doctors of course there is always new things to learn but those things genearlly build on the knowledge the learned in med school. To do an operation a doctor will rely on a new technologies, but when it comes down to it, but in general a operation is done with a scalpel, just like it always has. Nobody calims that you shouldnt need to learn anything new. It’s just the it is questionable whether new technologies make up for the loss productivity that results from steep learning curves and the complete obsolecence of old, hard earned skillsets.

  3. Mike,

    I think I kind of addressed that when I said “Tools are there to help you when you need them, not to act as a crutch you always have to lean on so you don’t fall on your ass.”

    When ever Microsoft releases a new version of the .net framework THAT should be the main goal for you to master, not the newest release of Visual Studio. If you know the framework and the syntax of the language you use then you do not need the tools to build great software.. if the tools are getting in your way, use something else.

  4. Some good points both in the article and the comments.
    However what if Microsoft only provide “bad” ways of doing things?  I work primarily in the database, and there is more than one example of this.  Farming out common functionality for returning a value to a function is clearly good practice in any language, yet the performance of UDFs in SQL Server is so bad that many developers shun them, and even Microsoft are luke warm on their usage.  As a workaround they suggest using table valued functions but only returning a single value – a ridiculous hack that makes a mockery of trying to do things the “right way”.

    Dean Bullen
    http://www.impartica-training.co.uk/
     

  5. A programmer who is able to understand what it does, maybe can become a good programmer, but one that only know to use “point” + member method, 🙂  and forgot “the because of the things” will never be a good programmer. In my opinion, .Net is a language very limited, in terms of architecture (there is only a unique way !), which limits the formation of future professionals.
    best regards for all

  6. Agree with you Andreas.

    Just an example, recently I was hired by a company that needed to speed up certain queries in a database. The previous contractor had push SQL Server to its limits… actually I learned a thing or 2 while examining their code (and I have been working with SQL Server since version 6). The previous consultant just have been bough to the conclusion that it was the best that could be done with that kind of data. But after looking at the way that the data needed to be manipulated, using bit arrays instead of records made much more sense, and the speed gains for this type of calculations were 10x. But bit arrays is not a topic on the ADO.Net examples…

    The thing to note is that both solutions were winforms/C#/SQL Server based.

    Seeing a better solution in a different domain with the SAME tools was not up to the vendor, was up to the programmer.

  7. I agree too, vendors doesn’t create bad programmers, however their tools can influence a lot younger ones and the rest of their carrer.

    In my experience best practices and good algorithms should be taught in a tool-and-language-independent way to make more craftsmen.

  8. I agree that a developer should take responsibility for his own growth, which I do. I am a new developer, I have been real-deal programming (not in a school environment) for about 7 months. I am always reading and studying what other, more experienced programmers have done as well as books. I have programmed in Java, VB.NET, and C# and have actually come to prefer C# as a language. I am currently studying functional programming more in depth (with F# and scheme) so that I can use the knowledge gained from that paradigm with my current projects.

    I think that it would be kind of silly to become a developer “just to pay the bills” because I can think of much easier things to do to pay the bills. I do what I do because I love doing it. I don’t care about the tools used because ultimately it is the skill with the language that determines success. Programmers used to write entire programs in notepad and vi and they worked. The development world is ripe with opinionated people that think what they do is the “only true way” but ultimately everyone should decide from themselves what to do. Don’t forget that ultimately the business is paying you to provide useful software and if you get too lost in the details to provide that, you might as well not even bother.

  9. You might want to proof read your text.  Maybe even go over your code , that is if you write any.

  10. I’ll wait until you write a lexer and a parser for the English language… let me know when you are done.

    :^P

Comments are closed.

Proudly powered by WordPress | Theme: Code Blog by Crimson Themes.