Internationalization: Problems Faced Within the System
- March 6th, 2010
- Posted in Programming
- By netadptr0719
- Write comment
I recently attended a class on the problems facing internationalization within software engineering. It brought up a lot of good points that I had never even considered as internationalization problems. Having two internships and having to deal with internationalization problems I had kind of thought that I already knew my way around it and how to effectively deal with the problems. Most of the things I didn’t consider were little logic errors, not larger scale problems. Most notable being that in other languages, what is considered alphabetical, changes. One cannot always assume that if one is looking at a list, that the A’s will necessarily be in a row since the normalization of Á would turn into A but may not be locally recognized as the same.
Many of the problems discussed in the class focused around things that I would consider ‘learnable behavior’. Things such as making sure you are using Unicode encoding, being aware that an icon that has obvious meaning in America may have no meaning at all in another country. GUI design was another hot topic in the class. You have to consider that some language will read right to left rather than left to right. Many languages have words much longer than their English counterpart and could either be cut off in a label or possibly cause a line wrap. All of these things are true and should be the focus of any software engineer that wants to do well with internationalization. However, I believe that this isn’t truly the root cause of the problem. An engineer should be able to pick up simple concepts such as externalizing strings, swapping out icons when necessary, and using a new style of GUI design. I believe that the true problem lies in the environment in which the engineer is developed and kept.
The first true stumbling block of internationalization is the educational system. While in school engineers are only really forced to create programs for themselves that have a very narrow scope of operation. They are never expected to create a program that is to be consumed by any other end user other than themselves, their instructor, and perhaps a grader. The educational system should really take on some responsibility in how they teach students to create deliverables. This wouldn’t necessarily require any sort of major overhaul in the systems. I know that many schools require a sort of capstone class that has a student create a product that, in theory, could be operated by an end user. Since we now live in a world market it would not be outside the scope of a class such as this to incorporate ideas involved in internationalizing software. Some of this burden would be taken off of the educational system though if perhaps development books were written in a new way.
Development books are a cornerstone for the growth and education of any software engineer. The problem in these books however is that more often than not they focus on almost entirely over simplified examples. In introductions to languages this is to be expected and I don’t think that “Hello World” needs to be internationalized in an effort to expose new engineers to internationalization. Exposure should, however, be given soon after the basic concepts of programming are taught. I can’t entirely blame the book manufactures for producing code in this manner though because most current languages are only written in an English readable format.
An English readable format is perhaps one of the largest stumbling blocks that an engineer has to face when creating software that is to be internationalized. If a native English speaker is creating a program, more often than not, that language will read almost like English and will have a sort of familiar flow to it. It really distracts the engineer from the fact that it needs to be internationalized because in the mind of the developer it seems to flow so well. Languages are written in stone and there isn’t really any logical way, or reason, to go back and write C++ and Java so that it is absolutely unreadable to anyone. This does though allow a good metric on which to judge a software engineer and his dedication towards internationalization. If an engineer is able to distance himself enough from his own native language then he is a software engineer who is not only able to create programs that will conform to internationalization but also an engineer that should be seen as willing to push himself and constantly grow. Not all of these problems lie on the educational system and the engineer themselves. A good majority of this responsibility falls on the industry as well.
While an engineer may be put on a one way track through his education, and perhaps books if they study on their own time, industry is often guilty of endorsing such behavior. Once an engineer has finished school and heads into industry, there is usually a short time dedicated to educating that engineer. Most of this education focuses on business-centric education. More and more businesses are moving towards including internationalization education in their training and that is a major first step. Sadly it is only a baby step because once the engineer is in his position, education ceases and practice begins. In many engineering environments, engineers are expected to produce, produce, produce. While I am sure many engineers expected this, and industry loves it, I am pretty confident that it is not what is best for industry. While the industry is expecting engineers to produce they are unintentionally culturally isolating the engineer and, despite what they may think, actually lessening the expectations on engineers. While the expectation of work may have increased, the expectation of continuing education decreases. Many businesses offer incentives to continue education which sounds very appealing. However, when your work expectations are so high, it leaves little time to dedicate to continuing one’s education. If a company wants to see their engineers succeed in an international environment they need to dedicate their time to putting engineers on the front line and truly showing them the problems that are faced on an international stage. Many examples given involve how a GUI interface may mess up, but this is only the beginning of the problems seen in the international space. If an engineer is able to see how his work affects another individual from poor internationalization, it would allow them to have a more real understanding of how what they do directly impacts the global stage.
While many of these problems seem large and insurmountable, they aren’t. All it takes is a shift in the way people think and develop software. Luckily this isn’t a large shift in thinking and only minimal effort on the side of input to see a large change in the output produced by engineers. Until these small problems are addressed though, I feel that the problems seen in internationalization will continue to be an ongoing uphill battle.
“Development books are a cornerstone for the growth and education of any software engineer.”
Oh man did that make me laugh. I’m pretty sure I’ve never read a book for CS class other than to do homework problems.
@Goldman
To be honest then you are truly missing out. There are many great books out there that present a lot of theory and application that you would never learn in a class room environment. The sad part about it is though that despite them being more advanced writings they still more often than not fall into the pitfall of overly simplified examples.
Even in your “only for homework” example you do have to admit that these books do have the tendency to take something that is relatively complex and whittle it down into something simple. While this is good when you are first learning it really does a poor job in preparing you to build upon what you learned.
@netadptr0719
The problem of examples is that both directions suck. If you oversimplify something, it looks trivial and is very difficult to apply to complex problems. If you allow for complexity, the reader can end up spending a lot of time extracting what is universally important in the example from what is specific to that examples implementation.
Even if you leave examples in complex, real world form, I think it can be just as difficult reapply the main theory. While you have seen a complex example, it only shows you how to handle the complexity of that specific problem, not your own. Either way the reader has to do all of the problem specific work themselves, but a simpler example at least shows the main theory in a blindingly easy way.
TD;DR
Constructing good examples is actually really hard.
@Goldman
OK, talking with Zach we have figured out where the confusion with these books is coming from. When I refer to development books I don’t really mean introductory books so much. If you have read a book that is supposed to be higher level you would really understand what it is I mean here.
I recently picked up a Java book that is meant to be for people who already have high level programming experience. The book has done a very good job of not wasting a lot of time explaining what a variable is and has got into the nitty gritty very fast. The problem is that they over simplify the examples considering the are supposed to be taking into account that I already have high level experience. I already know WHAT inheritance is I just want to know how to implement it in Java. However, I am still stuck with the stupid bike example that seems to follow me everywhere. Information is lost because now I know inheritance but over riding, over writing, and the call stack on class information are lost.
This book is not the only book I have had a problem with. I bought a book on advanced algorithms about 3 months ago. It was a really good book and talked very high level with a lot of theory. When example code was given they treated me like I was back in 53 again. It just seems to make no sense to me because why would a freshman in CS bother reading advanced algorithms if they don’t even know how to program?
Ignoring ALL this what I am attacking most in books is not that they have low level examples at all. I am attacking that they never seem to move on past the simple examples. Once the concept has been introduced and explained there is no real reason to stick to such simplistic examples.
@netadptr0719
I feel the answer to this may lie in the post you made here: http://blog.rollachan.org/?p=85
People deep in theory are sometimes light on code experience. Its possible the authors are just not that experienced in the implementation, or expect their readers to be inexperienced. Or it could just be over-simplification. Who knows.