Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Questions to answer before proposing to use a new language?

Tags:

clojure

What are the technical questions I simply must have answers for before I approach someone about introducing a new language?

I'm looking for the list of technical questions that without a really good answer, I should not even waste anyone's time by proposing that we use language X.

PS: (def X clojure)

like image 722
Arthur Ulfeldt Avatar asked Nov 03 '09 19:11

Arthur Ulfeldt


People also ask

Do you need to ask before proposing?

You'll definitely want to come up with questions to ask your partner before getting engaged. While some topics might be uncomfortable to discuss, having candid conversations with your partner is beneficial to your relationship.


2 Answers

A crash course in politics for engineers...

Despite all the mission-statement baloney meant to sound noble and emphasize community support, the real purpose of every business is return on investment or, equivalently, maximizing shareholder value. If it's a government agency, it's kind of still the same question but the legal owners will have no direct influence and instead you will have proxy owners, such as higher agencies or powerful individual officials.

Decisions, however, are almost always made by agents, and so the principal-agent problem (also called the agency dilemma) appears; the agents (the management) will make a decision in their interest, and not necessarily according to the shareholder's interest as is theoretically required. In a government agency this is almost 100% of the consideration.

Sadly, this stirs in all the Dilbert and Parkinson's Law complexities.

The best you can conclude is that decisions will be justified on the basis of risk, cost, and benefit, but will tend to be made on the basis of what credit and blame is in store for the agent and understood by the agent, which is a narrow risk consideration of questionable value to the principal but at least an identifiable one.

So, we should now apply this to the language question. Your manager is likely to avoid threats, risks, scandals, and controversies. His application of the principals's concerns will be mainly through the constraints of budgets and expectations. Here are some examples that should be mostly self-explanatory.

If you want to use Java or PHP:

  • Everyone is doing it this way
  • This is the industry-standard approach for this type of problem
  • This is the low-risk approach
  • Similar systems have been done many times in Java/PHP

(That's the "no one ever got fired for buying IBM" argument.)

If you want to use Ruby:

  • Ruby is in the Tiobe top-ten (not quite an industry standard, so this is the best you can do)
  • PHP and Java are higher-cost technologies (he probably has a budget as an attempt to mitigate the principal-agent problem)
  • PHP and Java are going to be out of fashion "soon" (maybe not, but phrased as a "risk of appearing to stupidly use old tech', and implying the lack of later credit and recognition)
  • Ruby is an advanced language with powerful abstractions for cost-effective development (a weak argument for the agent, but offers the possibility of credit. The least effective of all the arguments.)

If you want to use Clojure:

  • You better prototype the system on weekends and evenings and present it as a solved problem.
  • Emphasize parallel Java / Clojure development ("if necessary the entire system can be written in Clojure Java")
  • Make all the Java arguments and then say something about "the best of both worlds"
like image 61
DigitalRoss Avatar answered Oct 23 '22 15:10

DigitalRoss


Productivity with a language is neither the only factor, nor a simple scalar in itself. Important questions include:

  • How easy is it to learn the language, if it's not already familiar to people on the team?
  • How easy is it to become expert at the language?
  • Does the team have access to one or more language experts who have the bandwidth to do the necessary mentoring?
  • Are good learning materials (books, blogs, tutorials) and support channels (fora, IRC, mailing lists) available?
  • Does the language (or some framework in that language) allow a competent programmer to write the software faster than what you're using now?
  • How maintainable is the language? How readable is the syntax to a competent programmer encountering someone else's code for the first time? (Think of APL and Perl.)
  • Is the language somehow better applicable to your problem domain than what you're using now (e.g., functional languages for distributed computing)?
  • How well does the language/platform meet business needs not related to development speed (e.g., performance, scalability)?
  • What are the available tools like, and what do they cost? Is there a debugger available? An IDE? Refactoring and unit test support built into the IDE? Build management and deployment tools?
like image 24
bradheintz Avatar answered Oct 23 '22 15:10

bradheintz