On Fri, 28 Mar 2008, Dr Skip wrote: > A question for this learned group on software engineering... > > If you were to recommend a programming language to a young engineer-to-be > (maybe software engineer or maybe hardware) to study before college, what would > it be given the following criteria? The selection shouldn't be based on > educational merits per se, but on usefulness to one's career, conformance to > current programming philosophies, availability (open, free, etc), ease of > picking it up (good dev environment), and it's ability for rapid development > (prefer something that will do console and windowed apps). The programming > environment and language should be free/open and can be run on Linux AND > Windows. Ability to create an exe as opposed to interpreted is preferred, and > stability ranks high too. > > Some of those criteria may not seem important in an educational setting, but > they are to a young self-educational setting... ;) > > Just to start the thinking off, I'll comment on a few choices. > > C - while good all around, is long in the tooth and not the easiest to pick up > and use, especially in a windows env. > > C++ - better, but more complex and like C, not a rapid dev env. > > VB - rapid and easy to pick up and do something useful, can make exe's, but > Windows only, now only .NET (.NET=bad), and the language isn't exactly mainstream. > > I was thinking the field might consist of Perl, Ruby, Python, etc, but will > leave it to you to choose. I've used Fortran, C, Pascal, Basic, Smalltalk, > LISP, and a few others and I would also not suggest them (nor COBOL ;). Think > in terms of keeping him on the right track from a programming/engineering > perspective and when he gets out in 5-6 years ;) whatever it is will still be > 'current' and the 5-6 years he's played with it will be useful experience and > good for the resume... > > TIA, > Skip Forget language what you need is something that will train your student to think logically, decompose a problem into steps without taking things for granted, and ultimately build self disceplin and avoid dangerous short cuts. I belive programming will change greatly over next 10 - 15 years primarily because the lanuages available today are inadiquate to allow compilers to build executables that take advantage of the growing amount of parallelism and huge amounts of memory available. Yes there are libraries that allow you to do multithreading but compilers could produce MUCH more efficient code if they know more about what the programmer is actually trying to do rather than be blinded by the wall that is the library interface. As an example take a structure. Here you gather together items that logically belong together. To process an array of structures you would use some kind of loop and an index. In doing this you prevent the compiler from automatically arranging variables for optimum runtime memory access. In short the CPU cache is trying to compensate for random access. If the language were more feature rich (say support structures with an anonymous layout) and the compiler more intelligent such that it could schedule blocks of RAM for high speed access (e.g. load whole pages into the cache in one go) then you would achive much better optimisation (probably at the expense of larger runtime footprint - but who cares). So I belive the best you can possibly do for this student is start him/her off on something like C or BASIC. Learn the underlying skills, maybe progress to assember just to really drive the leasons home and don't worry about which language will be in fashion later on. And please don't listen to all this rubish about learning BASIC being a handicap. Yes an unstructured version will let you do lots of horrible things but learning what these horrible things are is a part of learning how to do things right and building the self disceplin I was talking about. Regards Sergio Masci -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist