Skip to content

Becoming a professional programmer/developer

I was discussing with a good friend the open java initiative by Sun, he has some good points; things that can go bad for the community because of this move by Sun.

I want to concentrate in one of the points he listed that triggered an exception in my head.

He said and I paraphrase “What is going to happen to the developer/programmer that has invested all it’s time, energy and money into completely mastering and becoming the ultimate guru, when that language stops being relevant?”

My response is: He got what he deserved! I could see the rage in his eyes, but the truth is that there is a universally known fact to all of us old programmers:

You use the language that fits the problem.”

You don’t force the problem into a language, or a domain just for the hell of it. That means you need to know several languages, in fact, by learning different languages you become a better programmer, and you start realizing that languages are tools! the important part is not the language, it’s you! Yes, you, damn it! the language can’t think for you, but some languages do make some difficult problems trivial to solve –though that doesn’t necessarily means it’s the right language. You need to know different languages, to be able to determine and use the strengths of a language to solve the problem at hand. To quote Fred Brooks There are no silver bullets” the sooner we realize this the further we can go. As programmers/developers we need to understand to become a professional programmer, we need to think like one, and that means leaving passions, and favoritism aside, and use the right tool for the problem at hand, what ever that tool may be.

To be a professional programmer you need to be comfortable with all the different types of programming (at least be able to understand the basics of each) specialization is a very big buzz this days, but to me it’s not sustainable, it works well for some professions: Medical Doctors, and lawyers, but it does not hold for us. The basic reason is that programming is programming (does not matter the paradigm or the language, the process is more or less the same), heart surgery, cosmetic surgery, and neurosurgery share common grounds, but they tackle very different problems and scenarios , so it makes sense to have specialization, but programming paradigms are not that different one from each other, they are just different ways of framing a set of problems that are not efficiently handled by the other paradigms.

I hear you asking: “What about AI? What about embedded programing?” It’s still programming. You may say: “Surgery is surgery”. You are right. But the domain is totally different. The head and neck of a human being, is very different from the heart; but the deal breaker is the way each is taught in medical school and the fact you specialize in one area or another. This trend of specialization is now making it’s appearance in Computer Science, but not on the field of programming.

There has already been several articles and blogs on the difference of a programmer and a developer and which is higher in the food chain; I personally don’t care, and I’m old enough to know it doesn’t mean shit. But I will tell you this, you need to be able to adapt if you want to make a living as a professional programmer.

To finish this rant with some advice, please read The Pragmatic Programmer, this book will help, if you follow it’s principles .

12 Comments

  1. I will have to disagree with you. Before I do, let me honor the truths that you have spoken, which I concur with.

    • Languages are tools.
    • You CANNOT fit the problem into the language (or at least shouldn’t try. I’ve seen a couple of whacks at that.)
    • A “professional” (very big quotes) should be comfortable using various languages.

    I totally agree. You are right. You are correct. You hold the truth. Three times? OK… here I go.

    Even though you will probably not like it, we need to be able to specialize in a particular area of expertise.

    A programmer who can throw mediocre code at you in 5 different languages is of very little value for a very simple reason. At one given moment, he will be coding in only one language, and the result will be mediocre as well. Even if you need his polymorphic skill set, the end product will still be lacking. Wouldn’t be better if he just dedicated the same time to just one of two languages and excel at those?

    I can already hear your counter argument in my head. Languages are a dime a dozen, but the paradigms which form them are the key elements to learn. Once you’ve got a specific paradigm down, you can “easily” migrate from one language to another that works in a similar fashion. This can be considered as a truthful statement. Therefore what you are really requesting is for programmers that can work in a multi-paradigm environment. How many of those (excluding yourself) do you personally know? How many do you know can shift into that mind set? I am suspecting single digit or very little two digit numbers. And please keep in mind that you are the one that has had beers with celebrities of the industry.

    The present and future is revolving around having skill sets in a particular area of interest. This skill set will span various languages and technologies but all have a common goal. Web development is probably the best and most common example out of this. A complete web application will need markup, client side scripting, server side scripting/application, XML or another format to carry data, SQL or middleware technology for the backend information, etc. It’s not uncommon to see a programmer be adept in part or all of this skill set. None the less, this is all oriented in the direction of a common goal.

    There are other skill sets which can be mentioned, and I suspect more of these skill sets will emerge in the near future.

    The universal programmer? Nah, the average one is already dumb and lazy anyway, that’s asking too much out of him. A skill set driven programmer? A bit more possible, but needs has an agile free thinking programmer as a prerequisite (very rare commodity) . A paradigm/language specific programmer? This may be the best solution for most of them out there, weather it’s practical or not.

    Sorry to be on the pessimistic side of things, but I’m just playing it by ear.

    Posted on 15-Nov-06 at 2:44 pm | Permalink
  2. With all due respect, I think have to disagree with you.

    A programmer that throws mediocre code at you in 5 different language, will also throw it out if he only new one.
    Mediocrity is not a good counter argument. That being said, it’s just not about paradigm, it’s about solving problems, it’s about thinking and framing the problems in different ways to solve them, and it’s being creative.
    I’m sorry but after that part is done, the code is important, but not the most important. I do agree that being a good problem solver does not mean that the code will be good, but the opposite is also true, and to me that is worst.

    Posted on 15-Nov-06 at 2:54 pm | Permalink
  3. Language Specialization is overrated, it leads to crippled thinking.

    As with any kind of industry which mixes creative thinking with logical thinking, you will need the perfect tools for the job. The more tools you have, the easier it will be to adapt to your needs.

    The problem with doing this in a commercial setting is that companies have company-wide ’standard programming languages’, which limit your choice of tool, usually to just one. This makes sense from the business viewpoint as a mean of control and to ease up maintenance. This is a noble goal, but then some problem comes and that company-wide programming language will probably not be good enough for the problem at hand. Here is where the WTFs enter the equation.

    Posted on 15-Nov-06 at 3:08 pm | Permalink
  4. Problem solving is a key element of this. This is probably the little common ground we share on the topic. I always tell my students that before they sit down and code, they should sit down with paper and pencil, and plan out what they are going to do. Even if it’s just 30 minutes. Someone that is not skilled at visualizing the scope of problems and thinking up ways of solving them, is doomed as a programmer, or will just get a crappy job writing boiler plate code. This stands irrelevant of the fact that he can code in one language or ten. Then again your initial argument did not revolve around people’s problem solving virtues. Doesn’t matter, I’ll play along.

    Even though you may be a good problem solver, if you cannot lay out your solution in a particular programming paradigm, then you are still in trouble. I have heard, directly from your mouth, that your main problem with Java is that you are still not capable of embracing the OOP paradigm. Simply because you have not dedicated time to it, you are more than capable of working with it, but that’s a discussion for another moment. This is a perfect example of a good problem solver (you, and you cannot say otherwise), not being able to use a paradigm to materialize a solution. I myself have a difficult time working in procedural weak type languages. This is not a result of my problem solving abilities, but of my procedural weak type language abilities.

    Problem solving is one thing. And it is imperative from being a decent coding. Working in multiple languages/paradigms is another, and IT IS NOT IMPERATIVE in order to be successful.

    Posted on 15-Nov-06 at 3:13 pm | Permalink
  5. – Language Specialization is overrated, it leads to crippled thinking.

    Ummmm… no. Dumb and lazy idiots lead to crippled thinking. These same dumb and lazy idiots had a hard enough time learning one language that after they got it down, they don’t want to go out and learn another one. The “if it’s not broken, don’t fix it mentality” taken way out of context. This is common ground, not something that determines this demographic. Please don’t consider it so.

    Posted on 15-Nov-06 at 3:16 pm | Permalink
  6. Tamgo said:
    Working in multiple languages/paradigms is another, and IT IS NOT IMPERATIVE in order to be successful.

    Success is not the issue,–but ok let’s run with it for a moment–I do agree that you can be successful with only one language, that’s not worth arguing, but will you be sustainable over time?

    To be quite clear I don’t have a problem embracing the OOP paradigm, I’ve used several OOP languages, some that are older than you :).

    What I can’t do is translate my elegant solution to the Java language in a way that I feel, it’s good or efficient.

    My point has always been, knowing one language is better than none, but don’t start bitching and moaning when you find that you can’t get a decent job because you only know x, and everyone is using y now. Also you always keep bringing up how I’m the second coming of Yoda (Sarcastic comment), but to be quite honest I know and I can handle most of the things that has been thrown at me, because I have taken the time to learn new paradigms, that force me to look at the problems from different points of view, so I’m sorry but I don’t buy into the one language is enough manure.
    That’s my point.

    Posted on 15-Nov-06 at 3:25 pm | Permalink
  7. First of all, my goal isn’t “finding a decent job”. It’s not having a job period.

    When you sell solutions, it’s not relevant the language or technology you use. The important thing is that the users are happy, the application(s) hits the mark, and does it without consuming too much resources. Of course, there are several exceptions to this, especially when money for licenses and company politics come into play. Another reason why I want to get out of the corporate life style.

    Another thing, I am not the kind of guy that will migrate to the language that is currently fashionable, and neither are you. So I really don’t see how that last remark is even relevant in the discussion.

    Last but not least. I know you are the man, never doubted it for one second :p.

    Posted on 15-Nov-06 at 3:30 pm | Permalink
  8. Crap, you are making write more lines here than needed :p.

    It’s not about a job, it’s about making users happy (paraphrasing tamgo). Well there are a lot of people happy with Windows. so….

    Posted on 15-Nov-06 at 3:33 pm | Permalink
  9. There were a lot of people happy with Hitler and Napoleon too. You will not imagine the amount of people that are happy with George W. Bush. So what?

    Are you really going to use mediocrity as a point of reference for making comparisons. If so, then there is no need to continue with this discussion. It will become a pointless, never ending, out of context mini flame war. Do you really want to do that?

    Posted on 15-Nov-06 at 3:39 pm | Permalink
  10. You know what, you are completely right!.

    My point was about users being happy, and the consecuence of a bad implentation.

    Napoleon and Hitler is another topic I don’t feel the need to discuss.

    Posted on 15-Nov-06 at 3:52 pm | Permalink
  11. monk Says: To be quite clear I don’t have a problem embracing the OOP paradigm, I’ve used several OOP languages, some that are older than you :) .

    ouch!, I have to agree that you misquoted Juan, he has always said he can’t embrace the Java OOP implementation

    tamgo Says: When you sell solutions, it’s not relevant the language or technology you use. The important thing is that the users are happy, the application(s) hits the mark…

    stop using that word dammit http://en.wikipedia.org/wiki/Solution

    Now for the real topic, I have to say that after a certain number of languages you stop winning out of it, you should learn at least 2 languages for each paradigm (please note this is not paradigms x 2 languages)

    On the other hand if you master say Java, this will help you a lot in other languages like C#, C++ and even C. SO it’s not a bad thing.

    So I’m with you monk use the right tool for the right Job.

    Posted on 16-Nov-06 at 9:40 am | Permalink
  12. Found this while googling. It’s fun to watch the discussion in retrospect.

    Posted on 09-Jan-07 at 2:12 am | Permalink

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*