Journal Articles
Browse in : |
All
> Journals
> CVu
> 113
(22)
All > Journal Columns > LettersEditor (132) Any of these categories - All of these categories |
Note: when you create a new publication type, the articles module will automatically use the templates user-display-[publicationtype].xt and user-summary-[publicationtype].xt. If those templates do not exist when you try to preview or display a new article, you'll get this warning :-) Please place your own templates in themes/yourtheme/modules/articles . The templates will get the extension .xt there.
Title: You Write - The Editor Replies
Author: Administrator
Date: 07 April 1999 13:15:30 +01:00 or Wed, 07 April 1999 13:15:30 +01:00
Summary:
Body:
Dear Francis,
I read the articles about internationalisation with great interest. To keep the discussion going I thought I write a bit about an experience that I felt fairly unhappy about. I am sure there are better ways to solve this and I would really be keen to get some feedback.
I developed a scientific application using Microsoft's Visual C++. In this environment all language information can be stored in the resource file (*.rc). The resource file contains string tables, menus, bitmap locations and the layout of the dialog boxes (among other things).
Once I finished the English version of the application I wrote a small Tcl script to extract the pure strings from the resource file (and some information from where I extracted them). This information was then submitted to our translators and once they had filled in the translations, a further script created the resource files for the other languages.
Up to now the whole process was fairly easy and fun (I spend most of my time writing scripts ☺). Next I had to spend a bit of time verifying that in the layout of the dialog boxes there was enough space for the new strings and made the appropriate changes. A bit more time was spent to add all the appropriate short cut keys and then I was ready to ship version one of my software.
Half a year later my client decided to create version two of the software. This version included quite a few changes, especially in the dialog boxes. My string extraction script was modified so that it would not only extract the English strings, but also look at the previous versions of the resource files and suggest a translation (about 60% of the strings remained the same). The only area I was really unhappy about was the fact that I was back at the English layout for all the dialog boxes. I spent two days verifying each dialog box and readjusting the layout for larger strings. As I had done exactly the same work before (at least in 60% of the cases) I feel that there must be a more efficient way.
I hope some people in ACCU have experience in this area and are willing to give some feedback. To get them started they might want to answer these questions:
What techniques are used to keep strings separate from the remaining code? I'd also be interested in any experience of methods that do not require a recompilation.
Are there any tools for this type of work?
Any comments on the way I approached the problem?
Jorg Bauer <jorg@rabbit.co.uk>
Well, how about it? Of course there are other issues such as response keys for menus. y/n works for yes/no in English but is hardly intuitive when the questions are asked in French.
Dear Francis
Re Silas S Brown's article about X-servers. The company that I work for also do quite a bit of development work on remote Unix machines, and we also tried the rather buggy (but free) MI/X. However, we now have a problem free and easily configured system called KEA!X from Attachmate Corporation. There is a 90-day timeout appraisal version available on the web, and we liked the product so much that we bought some seats. Don't know the price, though (not my department).
Re the Java thread - I have just started learning this (from a mainly C, assembler and {makes sign of the cross} Visual Basic background) and I think it is pretty cool. I would personally welcome more articles on Java.
Thanks for a great read every month - there aren't many magazines that provide that much grist for the mental mill at that price.
Edward Collier <ewc@techop.co.uk>
Well that last paragraph should be addressed to the numerous contributors who make it possible.
Francis,
I made an error in my published letter - Ghostscript is the product of Aladdin, not Adobe, who produced and defined PostScript. An easy, but careless mistake.
I liked the suggestion that employers would give people time off in loo (sic) for coming to one of our events!
Graham Patterson <G.A.Patterson@mail.btinternet>
Yes the trouble with spell checkers is that one has to get close to the correct spelling before it offers the appropriate one.
Francis,
A quick observation.
I work in a research environment where publishing is part of the job description. There the spirit is willing.
I guess that I wouldn't immediately think that problems and solutions that I deal with are anything new to expert C++... just my relative inexperience.
Below is a 'case study' outline of the problem that is taxing my mind right now. Is there anything 'ultimately' in it as an article or is it just me on the learning curve.
Daniel Sandars <daniel.sandars@bbsrc.ac.uk>
As the overwhelming majority are far from being expert in C++ (I do know a couple of exceptions, but they are always telling me about new insights they had last week and how stupid that makes them feel ☺ Case studies looking for a solution are a valuable commodity. I append Daniel's case study. It might be best to discuss any solutions direct with him. An article on the result might be more appropriate to Overload - but let us get to the article first.
Case Study
For instance I am currently trying to put together a program that analyses a network or in this case a tree such as a process flow chart enclosed within a system boundary. An example would be a system whose output was say 1 tonne of milk, which required transport from farm, etc, etc all the way back to the sources of the inputs to the farm.
My boss, a mathematician, thought matrix algebra suitable, i.e. the system is described by Process i by Attribute j by Stochastic Parameter k (each Attribute can have a mean and a standard deviation, etc) and subsequent functions are used to map the matrix on to output vectors.
I however saw the objects, i.e. a base process class and derived classes for transport steps, various transformation steps, storage steps, the output step and the inputs steps all contained within a system class. To illustrate the idea all steps will require energy but for each the method of calculation is different, in the case of transport it is the number of tonne-kilometres and type of transport system in the given scenario, in the case of storage it is something else. It goes further because the energy may come from an associate object that contains data on the cost and environmental burdens of energy supply.
The complicated bit for me is/was finding a tractable method to:
Allow the user at run time to choose which process types (derived classes) make up the system
Allow the user at run time to retrieve or input scenario data for the processes
Allow the user to link them up as they saw fit
Validate the linkages and scenario data
Compute the process data per scenario,
Compute the properties of the system (e.g. total energy demand),
etc...
I've got to the point of 'discovering' that I can use polymorphism to link together derived classes which are determined at run time via base class pointers of type base class, which is an abstract class. Now I have to work out how to coherently manage the tree from somewhere.
Dear Francis,
Having read the letter from the recent graduate (and replies) in issue 11/1 and 11/2 I feel it may be useful to relate my similar experiences.
I graduated with a Maths degree four years ago this summer. My first IT job was in Network Support for Devon County Council - a stroke of luck since they didn't want to pay for anyone skilled, and I was enthusiastic with computers. This job provided my stepping stone to my programming career. In March 96 I moved to the Thames Valley to work on CASE tool integration products. The only problem was, I was using two in-house languages, although the management did frequently promise we would move to a commercial language soon...
Eventually I realised that I was in trouble. Like the graduate who started this discussion, I was programming, yet I wasn't doing what I wanted to do. I was heading down the wrong road. So I learned C from Kernigan and Ritchie. Then I learned C++ from my Manager's QA notes from X years ago. I polished my skills using the Meyers books. After a few months and a few helper applications distributed to my colleagues, my company realised they had potential in me, and had the grace to send me on QA's excellent "Advanced C++" course. This was the icing on the cake: the first thing on my CV that rubber-stamped my abilities. This was just as well, since the company then got into difficulties. I found myself a new job with a very good company who believe in people.
I don't believe that just because I know C++ I am an expert computer user. Commercial languages are the springboards that lead us to the real work. My old employers frequently used buzzwords like OO, Methodology, and domain analysis as if invocation could bring about the practice. It is very hard (as a recent graduate) to get experience in these skills unless your employer practices them. This should be borne in mind by CS graduates as well - just because you've spent 30 hours being told about methods, it doesn't mean you are an experienced methods practitioner. I can make a balloon dog, but I'm not a circus entertainer. Unfortunately, this is the attitude forced into the CS graduates by their lecturers.
The Computer Science/Non-Computer Science degree snobbery must stop. I know very talented software professionals from both sides of the fence. Likewise, I know some people who really shouldn't be allowed in front of a computer from both camps. People should let ability and enthusiasm speak for themselves.
My advice to the anonymous writer, is to keep at it. Decide what you want to achieve, then walk that path. The ACCU book reviews are an excellent resource for a person in your position. Best of luck!
Steve Cornish <SCornish@softwright.co.uk>
That reminds me that the second worst delegate I have ever had on a C++ training course had a degree in Computer Science. Somehow he had managed to acquire this without ever actually doing any programming. And one of the best I have ever had was a software retailer who wanted to learn more about the products he was selling.
Hi Francis
[I'm the 'anonymous mathematician' wanting to work in C/C++ whose letter was published in C Vu 11.1]
Firstly, let me thank Chris Hills and Stefan Bates for taking the trouble to respond, and Francis for publishing my letter despite it being anonymous and not particularly original. Perhaps because Stefan's response was somewhat more positive, I do not have any specific comments to make on it, although I will think seriously about taking his advice.
I would like to respond to a number of points in Chris Hills' letter.
As for programming being about more than just learning a particular language, I would certainly not disagree - however, when it comes to jobs things certainly seem to be described on the basis of the languages which will be used, which is how I was lead on to describing things in this way.
My knowledge of general programming techniques is restricted to what I have been able to pick up from various books and magazine articles over the years in which I have been computing on an amateur basis. I would certainly admit that these things are important, and I am always keen to pick up on new techniques when I can. Once I have made a little more progress with my C++ I hope to read up on some of the various object-oriented design methodologies, as well as such things as patterns.
As for not-so-new techniques which I would presumably have learned about if I had done a degree in computer science, I have read one or two books on data structures and the like while at university, and at some point in the near future hope to find the time to purchase a suitable text and study this material more thoroughly. (I appreciate that this is not all the material I will have missed, but private study can only go so far and I have to start somewhere.) Of course, I have picked up a moderate amount of the more basic material over the years, and such simple concepts as linked lists, hash tables, binary trees and finite state machines are not unfamiliar to me. This list is not intended to impress anyone with my incredible knowledge (and a good job too, as I doubt it would succeed), but just to show that I am not a complete novice who has dabbled a bit in Visual Basic and thought 'hey, this programming lark's easy, I wanna do C++ and make some real money'.
When I wrote about entering the profession as a new graduate, I was thinking of the many times I have seen claims that companies are happy (some-times even prefer) to take on non-computer science graduates and train them; in this way I hoped that my non-computing degree could be circumvented.
Chris concludes by saying 'Otherwise go and get qualified in the profession in which you wish to work'; could he please tell me what he meant by this, so that I can give the option some serious consideration? Does he have some particular kind of formal training in mind, or is this a suggestion that I should find an employer with a more suitable environment for learning and support for acquiring professional qualifications through training and/or experience? (I understand, for example, that IEE membership can be obtained either via an accredited training programme or a sufficient amount of relevant experience.)
Speaking generally now, one thing, which does worry me, is that although I may continue to gain experience with my present employer, will it be respected if and when I come to look for another job? Here I am, with no formal training in software development, having worked on small one or two person projects with (in general) similarly qualified people. Surely anyone aware of this (and I have no desire to misrepresent my experience to any potential employer) will be inclined to think thoughts along the lines of 'So what? It just means he's an experienced cowboy.'? (They may even be right to do so; although I try very hard to do things properly, I could of course be making potentially serious mistakes without realising it.) I can't help wondering whether this alone means I should leave my present employer and seek a position where this risk is minimised. This does not appear to have been a problem for the reasonable number of people with similar backgrounds to my own who have left the company to take up other jobs in the software industry, but this may simply be a reflection on the difficulty of judging someone's abilities in a relatively brief interview.
Apologies to anyone who thinks, on the basis of this or my previous letter, that I'm whining; I'm trying very hard to avoid giving this impression. I'm really just trying to get an honest opinion of my position and options. My biggest fear is that in three or four years' time I'll find that it's too late for me to change the direction of my career and that I'll be stuck in the software industry but not actually qualified to work in it. Based on what I've read about the state of the industry in magazines like C Vu this may not actually stop me earning a living - but from the point of view of moral and job satisfaction it can hardly be called a desirable position.
Actually, if you have an agile mind it is not as hard to change direction as many fear. Being told in my late forties that I could no longer earn my living as a teacher (because it was damaging my health) was a traumatic event. I think I have done OK since though I still miss teaching the young.
Francis,
I have to disagree with Chris Hills and his comparison of medicine with programming. Computer Science is still a very immature subject, when compared to the "real" sciences (mathematics, physics, medicine etc). Personally I am of the belief that someone with a good grounding in mathematics (A Level or above) is suitable for a programming position, after all programming is not that far from mathematics. Being a recent (computer science) graduate myself I recall little from my degree that is relevant to the title "Software Engineering".
I agree with Chris that there is more to programming than knowing a language, but I don't feel that the average computer science degree really offers much to fill that gaps either. Most of the code presented to us in lectures as example code, would only be considered suitable for example of how NOT to do it within the ranks of the ACCU, or my current employers. In particular we failed to cover the topics that Chris mentions such as: OO, project control, systems analysis, with only a brief look at structured design methodologies.
Fortunately I have been working for my current employer throughout most of my time at university and have had change to learn on the job. I still feel that the most useful parts of my education today come from A-level mathematics, physics, and practical work experience. That along with the forty or so books I purchased over the years to fill in the gaps, or simply because I enjoy programming (yes I'm the person that buys (and reads) Peter van de Lindens books for fun).
Finally I thought it would be interesting to note that when looking around the people I respect at work, who are considered experts in one field of software engineering or other they include two chemistry PhDs, a metallurgist, hardware engineer, physicist, and a mathematician, I'm still looking for the computer scientist...
John Crickett <john@crickett.demon.co.uk>
Of course if we required managers of software companies to have Computer Science degrees a certain large company would have to change its management. Now that reminds me, should we require managers to have degrees in management?On the subject of suitability to be come a programmer, I think the evidence is that mathematical talent is not actually a good indicator of talent for programming. Historically computing was developed by mathematicians which may mean those with similar backgrounds better understood what was going on. However one of the great computer scientists, Professor Hoare, has a degree in Classics and he maintains that is an excellent training for the subject.
As a maths graduate I feel qualified to criticise practitioners of my speciality. Many of them have very rigid views as how to proceed with solving a problem. This is not conducive to being a successful programmer.
Academic teaching of programming is ghastly. Many heads of Computer Science departments have little idea about the subject, at least as an engineering discipline.
Hi Adrian (Fagg) & Francis,
I found your (Adrian's) multithreading articles in C Vu really interesting, especially since the topic has recently been covered on the course I am doing. I understand the lecturer, Jean Bacon, wrote a book "Concurrent Systems" (second edition, Addison Wesley 1997) which explains it in more detail, and it has been translated into a number of languages. (Aside: Wouldn't it be nice if it were easier to find out what translations of a book there are out there and to get hold of one? I've lost count of the number of times I've wanted to say to someone "if you were better at English I'd suggest this book".)
About priority inversion, there is another way of dealing with it besides minimising the time that low priority threads lock resources (which is not 100% reliable because the low priority thread may get interrupted by a medium priority thread), but you do need some control over the scheduler. When working out the priority of a thread, take the maximum of its assigned priority and the priorities of any threads that are waiting on the resources it holds. That means, if a high priority thread is waiting for a resource held by a low priority thread, the low priority thread is executed at the high priority so it finishes with the resource as quickly as possible. You then need to interrupt it and put its priority back down.
Of course, you can only do that if you are writing the scheduler, which is generally not the case if you are using OS calls. (I understand that the OS they are developing at Cambridge, called Nemesis, allows the programmer much more flexible control over the scheduling.) If you write your own scheduler or let your runtime library do it, besides it being a more complicated approach, if any one of your threads blocks at the OS level then they all do.
One way you can cope with deadlocks is to give your resources an ordering and rigorously stick to that ordering when allocating them; if you find you just have to break the ordering, then you'd have to abort the process and try again. Some schedulers can have "deadlock detection" code that can tell deadlocked processes to abort and retry. This essentially works by pretending all the non-blocked threads can finish immediately, seeing which other threads would be unblocked if that happened, iterating until you can't do any more and the ones left are deadlocked. If you do implement some kind of abort mechanism then you may need to worry about cascading aborts, if some other process has seen the intermediate state of a process that has had to be aborted. You may need to worry about livelock as well as deadlock. This is when events happen so fast that your program does nothing while trying to deal with them - while it is deciding how to deal with one, another happens. In this situation you may need more locking.
Silas S Brown
Hi Francis,
I was amused to see the picture of the William Gates Computer Science Building, Stanford University on the front cover of C Vu 11.2.
It appears that Stanford are keeping up the Microsoft tradition in two respects. The building would appear to be a beta version, or maybe even an alpha version, judging from the plastic cones and yellow tape. Also they appear not to have performed an end user requirements analysis resulting in a lack of cycle racks, with bicycles therefore propped up or lying on the ground in front of the building. 8-)
Bill Sparrow <bsparrow@cix.co.uk>
The original photo reveals even more. The whole of the tier of potential windows level with the dedication are simply blank 'concrete'J Sort of the building equivalent of a 'blue screen' event?
Francis,
I seem to recall that you asked for feedback on my use of the AWL scheme giving 25% discount to BCS members.
I have just used it, ordering several books by email, paying by Visa. The advertised delivery charge is £2.50. I was not charged for delivery, perhaps because of the value of the order (about £250 after discount).
Delivery was promised as 7-10 days maximum. It was made on the 8th day.
There was slight manufacturing damage on one of the books. AWL have promised a replacement.
In general I am happy to support Blackwells and any other company that supports the ACCU. But, equally, I will not pass up a significant discount.
Alec Ross <alec@arlross.demon.co.uk>
Thanks for the feedback. Of course sane people take such opportunities for substantial savings and no-one should blame them. My problem is with the ethics of the supplier. This kind of offer undermines the book retailers. I value local bookshops and disapprove of things that make their continued existence less likely. What do others think?
Notes:
More fields may be available via dynamicdata ..