views:

266

answers:

9

Hi Stackoverflow

I want to ask a question on behalf of my father, a now 30 year veteran in writing software.

My father works today as a self-employed consulant for a single customer, maintaining a 20+ year old system written in COBOL -- but on borrowed time. The customer already have plans for changing to Microsoft Dynamics AX within the next 1-2 years.

As my father have almost purely done COBOL for the past 30 years, and so he is not familiar with any modern concepts such as Object-Orientated Programming, or any C style languages (C++, C#, Java, etc.)

What I think is imperative for him to get a new job once his client changes to Axapta, is that he'll learn some of these modern concepts. I'll personally be able to tutor him for a lot of the advanced topics, in Java and C#, but as I don't know COBOL, this is a large disavantage for "converting" him to the modern day jargon in software development.

So some problems remain, and these are the ones I would like your input on:

  • For a person experienced with ERP systems (such as Movex) and business economics, is Java or C# the more ideal choice?
  • With the perspective of his current client might would hire him for Axapta work, what language is most ideal to understand X++ the better ?
  • What's the best approach to training a COBOL programmer in Java/C# techniques?
  • What litteratur could be recommended? I might need to find something localized (Danish), to ensure higher commitment to learning something new.

Any other advice on how I can help him would also be fantastic!

+1  A: 

I'd suggest taking a look at Python. It supports functional, procedural and object-oriented development, but doesn't force you into any one of the paradigms. The syntax is clean and easy to learn, as well as having a great online tutorial and well documented language syntax and standard library. So, you can ease into object-oriented design without clobbering him with unwieldy C++/Java/C# syntax (although Java/C# would definitely make for an easier starting ground than C++). It also integrates well with C and C++ (using boost::python or Swig), so you can take an existing program and slowly move it lower-level.

My basic point here, is that jumping ship from one development paradigm to another is likely going to be more difficult than switching languages, being able to use a similar paradigm, and then slowly start shifting paradigms once you're comfortable in a language that can provide both.

Nathan Ernst
I don't quite think learning a niche language, that's not at all used in the relevant line of business, makes a awful lot of sense. Not to mention, the lack of classic development tools makes it even more confusing. (Also Ruby have a far less annoying syntax :p)
Claus Jørgensen
I disagree that Ruby has a less annoying syntax. Looks too much like Perl. Also, there are IDEs available for Python; one is even installed by default with the Windows install. The point I was trying to drive home, is that it'll be more an issue of mentality (i.e. procedural vs OOP), and using a language where the barrier to moving from one to the other is lower can make the transition simpler.
Nathan Ernst
+2  A: 

Theres an interesting book available for a $1 (paperback), 'Java for Cobol Programmers' by John C. Byrne http://amzn.to/bKqc5j

Mondain
I noticed a bunch of free info here: http://www.cobug.com/cobug/docs/whitepapers0018.html
Mondain
+3  A: 

What's the best approach to training a COBOL programmer in Java/C# techniques

I maintained a few COBOL applications for a couple years, but didn't write much new code and have forgotten most of it, so please forgive any obvious errors on that side.

First, leverage the knowledge he has amassed. Find out from him what's difficult or otherwise a pain in COBOL. For example:

  • Memory Management - how does it work? Can you do dynamic memory management? If so, how?
  • Scopes and Globals - what scopes are available in COBOL?
  • Records and Data structures - what would it take to store an XML file in memory so that it was easily modifiable? What if the file length was unknown?
  • COBOL Limitations - when did he need to call out to programs written in assembly or another low-level language?
  • Operating System Limitations - Could he process any number of files passed in on the command line? What about verifying a physical device existed before accessing it?

Then, find out what it was good at:

  • Reporting
  • Reading flat files
  • Legibility (beauty is in the eye of the beholder, right?)

With that knowledge in hand, ideally you can show him how Java/C# solve some of the problems he had with COBOL. Try to show him how it might be easier in Java/C#/Python/Ruby. Admit where COBOL might be better at doing certain things (like, perhaps, reading a flat file with fixed-width, fixed-formatted fields). Ideally, you'll be able to show him easier ways to do things that he thought was easy.

Kaleb Pederson
+1  A: 

If his client is going the Microsoft path, perhaps learning .NET is the right way to go? When I thought I was going to be working with C#, I enjoyed the following:

For OOP, why not try some good literature to get him started after C# starts to make sense?

I'm sure your father will be able to come up to speed. I suspect one of the major hurdles, however, will be learning a new toolset. Visual Studio can be very intimidating if you're used to command lines, config/build scripts, et cetera.

Dr. Watson
A: 

It's a pretty big jump into OO programming--it can bend your brain quite a few times, and I'm still not sure most "OO" programmers actually get OO.

I'd suggest a procedural language, but if you really want to show him Java/c#, I'd suggest an environment like BlueJ, it does a great job of getting you to think in terms of objects. I still use it to prototype sometimes because I love the UI, but the editor is lacking. If I could figure out how to plug an Eclipse editor into BlueJ I might stick with it all the time.

Bill K
+1  A: 

Try and find an instructor-led course to help the transition between COBOL and Java/C#. These 'crash course' introductions can help your dad understand if this is the direction he wants to go in. If it doesn't work, explore other technologies. No sense wasting a lot of time with self-study and reading if it is not what he wants to do. The course will show him some potential and direction.

EDIT

I removed the link to the course as I am not sure it applies to the technologies mentioned in the OP.

EDIT - Courses

Java Programming for COBOL Programmers

Edward Leno
+2  A: 

Considering your dad's client is going for Microsoft Dynamics AX he might as well go for X++ and MorphX (the AX development platform), which features databases, forms and reports with zero lines of code.

Start with the AX basics: Extended data types, Base Enums and Tables, then move on to Forms with a grid with an AutoDataGroup field group, then the same for reports.

For X++ there are lot of good (and more bad) examples in the code base to look at and tune!

Links to books:

There are no development related AX books in Danish to my knowledge. There are some other material in Danish found here (registration required):

There is a free test drive of Microsoft Dynamics AX here:

Your dad may never be fully OO aware, but given his prior knowledge of ERP systems he is years ahead of most Java kids.

Jan B. Kjeldsen
+1  A: 

First, plan on skipping C/C++. However good they are at requiring knowledge of architecture, I'm sure that's not an area that needs focus. Instead, start with the COBOL structures he already knows and show how they can be described using modern terminology.

Second, have him learn UML. Not any methodolgy, just the notation. Most COBOL programs have similar organization problems to be solved, they just use copy-libs and separate programs or modules.

The core of OOP is to think in terms of data and related operations. Have him describe a COBOL application from a design point of view. What are the data structures, how are the procedures organized, where was the functionality divided between modules.

In the beginning, stay away from advanced language features like interfaces, packages, namespaces, closures, overloading, overriding, etc. Those concepts need to be introduced using specific examples or use cases, not by describing them generally. Operator overloading in C++ is a good example of a feature that was often overused and misapplied because it was there, not because it was the right tool for the job.

If you're comfortable enough with Java, you could have him start with the JDK and a simple editor like Notepad++ or Textpad. Stick with simplest examples that you can build yourself. Wizards may make it quicker to create classes, but sometimes repetition is the best approach.

Kelly French
+3  A: 

Become a member of the Association for Computing Machinery and then explore the on-line books and courses they offer (Safari, Element K and Books24X7)? The ACM offers a wealth of information. Also, becoming a member of the ACM does indicate that you take your profession seriously (some may disagree but, I find it worth while).

Other sources of quality materials can be found on various university web-sites such as Berkeley and MIT. Follow a few introductory computer science lectures and be re-introduced to the current state of the art - it isn't the same world any more!

The basic idea here is not to just learn some language, but to get an appreciation for what has happened over the past 30 years. Its, not just the language, its the whole computing landscape that needs to be re-visited.

Lastly, you could consider vendor specific training programs, but these tend to be really expensive and may involve travel to another city.

Your father is in a difficult position. He kept his head down and focused on the work in front of him to the exclusion of advancing his skill set. This may have benefited his employer but he is going to pay the price as he goes from being a "valued member of their team" to "surplus". This can be a heart breaking experience.

What does your father really want to do?

As I see it there are a number of options open to him:

  • Try to stay where he is: Use his knowledge of the current business as an asset toward finding a niche within the new ERP infrastructure and support. Forget COBOL and programming. Instead try to leverage his 30+ years of specific corporate knowledge into becoming a business subject area specialist to support set up and day-to-day operations of the new ERP solution. In this role, he may need to become familiar with X++, but should not need to master it. Learning the basic concepts behind the OO paradigm should be sufficient.
  • Continue as a COBOL programmer somewhere else: How strong are his COBOL skills? What other technical skills does he have (database, CICS, utilities and tools)? I know may programmers (not just COBOL programmers) that have 20+ years experience but still write junior level code. I also know a few that command a very strong grasp of the language. These people are always in demand somewhere - and they tend to be aware of current developments in computing and business practice.
  • Leverage his experience in ERP to become an ERP Analyst/Programmer. Commercial ERP solutions all have proprietary customization tools (programming languages and hooks). Gaining access to this "world" pretty much means enrolling in one of the vendors' education plans. If he were to follow this route I would encourage him to evaluate the commercial ERP market place first - I don't think Microsoft Dynamix AX has a huge share of it. SAP may be a better bet. Also, you mentioned that your father has experience with MOVEX, an ERP system from Intentia. Intentia was bought out by Lawson Software who have somewhat re-engineered the product line. I believe the new product line relies on Java based technologies. How well your fathers' existing MOVEX skills and knowledge will translate here is difficult to say - but they will need upgrading.
  • Learn a whole new set of computing skills. There are lots of stories about how "old dogs can't learn new tricks", but it really depends on the individual. Some people come by new programming paradigms, such as OOP, very easily. Some never get it (including those that grew up using OO based languages). To this end I would suggest that your father join a professional association (e.g. ACM) that offers quality self help and training materials. Once he has a grasp of what is available and the skills he thinks he can master, enroll in a community college or university continuing education plan to develop those skills in preparation for launching a new career.

All of the above are viable scenarios:

Continuing as a COBOL programmer is difficult only because few shops shop actively recruit COBOL programmers. COBOL jobs are not rare. In my 25+ year experience as a contract COBOL programmer I have found most jobs are filled through networking and personal contacts. Searching the careers section of the news paper won't cut it. You need to develop contacts. Do this by joining user groups; look up colleagues that have moved on and found gainful employment elsewhere. Research which businesses in your area still have significant COBOL applications then get to know some of the people that work there. Leave no stone unturned. Even talk to head-hunters, but beware of any agreement you enter into with them - some of these guys are real snakes (others not so much).

Launching a new career may be more difficult than continuing as a COBOL programmer. Your father has a wealth of experience gained over many years. All this may be disregarded by prospective employers evaluating his resume with respect to his OO credentials. In order to be taken seriously, he would probably have to obtain some sort of "certification" or diploma through his studies. This requires a large investment in time, effort and money.

The remaining scenarios involve leveraging existing ERP experience and corporate knowledge to some extent. Somehow I feel that this is his best bet. As a subject area expert, he needs a grasp of OO concepts and the jargon that goes with them. Basic OO knowledge and jargon is required to communicate with developers in a meaningful way. To become a full blown ERP Programmer/Analyst he needs to develop skills in a specific OO environment as well. In gaining these skills I would disregard COBOL all together - it is no help. All that Java for COBOL programmers stuff is just bashing square pegs into round holes. Start from scratch with a basic introduction to OO concepts. Following that, explore one of the OO languages closest to whatever ERP package he wants to specialize in (I'm guessing that would be C#/C++ or Java).

Finally, a few words of caution... It may be very difficult to teach your father anything. Parents don't often take instruction from their children very well. Your father needs to work out for himself what he really wants, and then go after it. By all means encourage him and offer help when asked for it, but don't try to lead him in any particular direction - he needs to be the one driving here.

NealB