Thanked China for North network drop
Over the years I (at work) use many programming languages: (can think of right now), Cold Fusion, HTML, Javascript, and PHP, SQL, CSS, and ASP (classic ASP. NET), c #, and Ruby, Flex, and Java and Clojure. Each language has its own advantages and disadvantages. As a programmer, you can easily point out the shortcomings-the summarizing is a word: I hate all the programming language–Matt Foemmel.
I think that when we start to take into account this problem is very important. At some point, you can now promote things begin to hate, so imagine what other people feel about it.
In 2008, I introduced in a code library DRW Clojure language. This blog discusses the past few years, I am in the process of introducing a new language in the experience gained and lessons learned.
Select a language
In the Organization, the introduction of a new language is not an easy task. If you want to succeed, you need to select a programming language, it will not only be able to meet a wide range of technical requirements but also to be recognized by the members. When joining DRW, I 100% with Java programming, despite the fact I wrote most of the code is only needed in an eye operation completes (250 milliseconds). We write the code required to run the time shorter than the blink, Java was absolutely the right choice, but other code written using the Java me Java has become a burden.
Once in a while I would complain about such a burden, my boss started on JRuby has interest. I think choosing JRuby is a victory for us, but I personally want to hear calls to support non-Java languages. If you consider the JRuby, then I think any advanced dynamic type language can be competent.
However, before I generate curiosity on JRuby, I have begun to learn Haskell. In General, trading companies using the software requirements for running “fast”. If I want to succeed in introducing a new language, it must be running “almost as fast as Java”. Haskell implementation is very fast I have heard, it also meets the other selection criteria for me:
A programming language, if you are not having an impact on the way you think about programming, is worth learning. —— Alan Perlis
I think that, if I find a programming language “good enough”, published programs faster, and are able to raise the level of our programming, then spending time on it is worth it.
I played a little Haskell, but seems too steep learning curve. Learning Haskell takes some time, but even more important is: our product is already running on the JVM. If I needed any help, should be able to easily integrate into your existing infrastructure. Think about Clojure, its performance is good enough, more concise than Java, and more effective than the other languages I have ever used before. Clojure is also a high-level dynamically typed language (like Ruby), so I hope that will be supported by boss.
Let colleagues as possible to reduce the pain of learning is a very big request–I think the key to this is to accept the new language. Clojure is the best choice, because we have had at work using the following tools:
· All day using IntelliJ
· Using JUnit to run all tests
· Created using TeamCity CI and artifact
· Server running on the JVM
· Use Yourkit for a dynamic analysis
Clojure meets all my criteria, and other colleagues will make it easier to accept.
As I recommended Haskell or OCaml, but they are not suitable for actual use–I doubt whether they can successfully be applied to development. When I need when in Clojure and professional guidance, I rely on others recognized “best” JVM server settings. Once you have selected the Haskell or OCaml, I need more to become experts (such as deployment, memory models, libraries, and new development tools, and so on).
Either then or now, I think Clojure is the best choice for technical requirements and corporate environments.
Hello World
Introducing a new language is a delicate Act. You need to take into account a lot of relevant content. I’m not sure what colleagues on the use of Clojure for responses, so I’m at home and write good code in advance. Although we all need integration tests, but no positive action. Then I started to use Java to write integration tests, and then write the version of Clojure. I know simplicity of Clojure and be able to show it to others–this is the most important team in the integration tests. In addition, because the test code that runs is not a real product, which does not really need to take into account the actual speed of execution.
Integration testing is a good place to introduce new languages, in fact, any non-product code is a good choice. For example, you can select the database migration scripts, log files parser, or third-party software Simulator software deployment. As soon as you select will not immediately cause pain, you should be able to easily recover from any failure of migration to the new language.
When I finished my version of Java and Clojure after testing, I show to other people in the team of the two versions. I tell them why I recommend version Clojure, Clojure for and ask if they do attempt. I also made a commitment, make them hard to refuse to do such an experiment.
(Credit:Windell Oskay, Bole online distribution map)
Your mission
In order for my partners to reduce the fear of accepting new language, I have made the following commitments:
· If you want to write code that I will do with you (if you want to work with me)
· If you do not want to write code that I will be missing part of the make up
· With new language to write code if you feel so hard for you to accept, I will be in my personal time written in Java content all the way through
Obviously, you need to use the new language before writing a lot of code for teams to accept – or you will be alone in the evening and weekend overtime.
Tool support
If you are lucky, your team has a set of tools that they like. No matter what tool is, you should be able to work well with the new language is supported. For me, this means that like Java, Clojure in IntelliJ should be executed. La Clojure plugin largely completed this important task; however, I need to write a framework for allowing me to run the specified test and is seamlessly integrated into the existing JUnit test collection. To say here is, as members of the team to eliminate all possible resistance of a new language. Learning a new language is rational, but only in order to adapt to a (the team) without the actual validation language and changing the team’s work, this may be too much to ask.
You may also need to make some sacrifices. I like Emacs written in Clojure; however, I prefer to write in IntelliJ Clojure rather than Java. In steering vulnerable period of the new language in the beginning, you will be required to compromise the maximum number of people.
Looking for allies
New language will love the degree of development varies. When people start when interested, you should have to do our best to encourage them. However, don’t force things–this is the easy way to make enemies. Hope you can find some partners as new language and you are interested in – and work closely with them and increase your level. You need to find more supporters, otherwise you will be the only one of the team people who force others to do what they don’t like.
You will inevitably need to do some research, need the tools support, and began to expect more problems need to be addressed. When you find yourself hard-pressed to it, will need other people to help you along the way. Even if all is working properly, you will also find that you need some of the growing number of supporters to help you maintain the new language code.
Finally, the worst situation is when you leave the team, there is no one left who is willing to maintain the code. Occurs when when you adopt new languages will be very likely to be a big problem.
Learn all the things
Obviously you can’t know exactly all the things, but when problems arise, you need to be able to give out or come up with an answer. Prior to the new language into the code base, you should read through a few of the new language, because the code base is the foundation of your colleague’s work. This was not enough, you also need to know if you run into problems where you can go to for help. Clojure, get back is IRC, and if the issue is not urgent or you need to describe your problem in detail, you can create a mailing list to find the answer. If you really want to hide their shortcomings, your needs and the language of the author or community leaders to establish some kind of relationship.
New language once you are accepted, they will start doing some unexpected things you. You need to know the shortcomings of the language, and may bring consequences. You also have to be an expert, knowledge of memory allocation, performance, integration, deployment, tools, library support, upgrade plan, and in addition all language grammar problems.
Your supporters more, you need to “know everything” just less. However, after every day at work, you should as far as possible, to know more about the technology. If you have problems, all of us will agree that it is your fault. It is introducing a new language should bear responsibility, so you should better understand what you are doing.
Get help
If your company is willing to let you introduce a new language, then it must be willing to provide support. You may have got some training budget. See is there a chance we can make language the author or community leaders work with you, or provide related training. If you have problems in every aspect of the new language, then let the authors of the language and to work with you can bring huge benefits. When all goes well, of course, if others in the team is interested in new language colleagues from the language of the author (or one of the community leaders) learn, budget vote for this training will bring huge benefits to you. Whether you own or interested supporters, using the company’s training budget to promote the new language is a useful thing.
Be advocates not fanatics
At the end of each day, not everyone can be compromised. This doesn’t matter. Do not impose their views on the man with no interest in. Most likely is, there will always be someone on the “right” choice full of enthusiasm. Passion may be recommended by your own language, but the language before your teammates can be like. You don’t have to separate who is right. People will only use your favorite programming language, any way trying to get them to try something else will do more harm than good. Like to use the new language of people are gathered together, rather than people who would be so. There is no reason to force people to accept.
At first, I thought of this problem is “if I come up with a better way, then everyone will accept it. “That is not the case, so I wrote an article in the software development of compromises. I understand that in the eyes of a person “better ways” appears to be in another “bad choices”. Finally, instead of Clojure and Clojure programming for teams divided into two groups. It’s good for both sides, people who want to use Clojure has a better environment, but other people are not forced to use Clojure.
This division only in private, of course, we are still in the company, “a team”. We develop a variety of applications, communicate through message exchange or not. I strongly recommend that a separate group in accordance with the scale of different ideas and (7-person team, I think it into 4 and 3 persons of the two groups is acceptable), but never in public in the company. Gradually, other factors will keep the team size, this Division will become redundant. If the team did not restructure because of other reasons, I still believe that the Division of the group is the best choice.
The end of
Introducing a new language needs for any size organization is one of many years to complete. Since the introduction of the new language, your responsibilities will never be “over”. Conversely, you already start to use the best tools fit for the work. Hope all things said and done is worth it. Personally, I am happy about their choice, but I also look forward to the next few years, “introducing a new language” on this topic more harvest.
English original: jaycfields compiling: Bole online