Advertisment

The fittest programmer to survive

author-image
PCQ Bureau
New Update

Know area of competence

Advertisment

To know which programming area you should re-skill in, you need to first identify which cell in the Programming Area-language Matrix on the next page best describes your competence areas. The columns are the popular areas of development. These fall under two broad categories: system programming and application programming. System programming refers to OS development, compiler design, writing device drivers, and other low-level programming skills, which often require direct interfacing with the hardware. Application programming refers to developing applications that run on top of some OS, for instance, desktop applications like productivity, graphics or multimedia applications and games, network, Web, and database front-end. The former requires in-depth knowledge of computer-hardware architecture and protocol specifications for communicating with the hardware through software. The latter requires knowledge of APIs (Application Programming Interfaces) that can be used from within a programming language to develop the applications.

Identify language

The rows in the matrix are popular languages. An entry in any cell indicates that the language is used in the corresponding area. By language we mean programming or scripting languages. Myriad languages can be used for development in the mentioned areas. In fact there are languages, which can be used in more than one area like C or Java. What language you use largely depends upon the area of development. In fact, it will not be surprising if a person knows more than one language for the same area of development. Note that in the table we have included only popular usage of general-purpose languages. There are languages dedicated to specialized systems, hardware design like VLSI design or dedicated control languages for machines that we haven’t included.

Advertisment

Are you secure in your cell?

After identifying your area and language of expertise, you are ready for the next step. In the matrix, we have marked those cells which face a short, medium,or a long-term threat to a person who fits in that cell. By threat we mean a threat of your skills becoming obsolete within a span of 3-6 months (short term), 6-12 months (medium term) and over a year (long term). People finding themselves in the short -term threat area must immediately take steps to re-skill or upgrade their skills.

Desktop apps programming

Advertisment

In C/C++ 

Veteran and intermediate C/C++ programmers who have been coding desktop application in C/C++ for Microsoft platforms should upgrade their skills so as to develop GUI-rich applications native to MS Windows. That is, you must learn developing GUI applications using MS Windows API and MFC classes. Though the obvious language to migrate seems to be VC++, but as you’ll see from the matrix desktop application development in VC++ is under medium-term threat. A more viable option is C#.

The same suggestion holds for novice programmers. To find out why, read the next section.

Advertisment

Coming to non-Windows platforms like Unix–particularly the popular Linux OS–C/C++ is commonly used for developing desktop applications, and that does not seem to be under threat.

In VC++ 

Skill areas vs languages
When the time comes to move to another area or another language, which is easier?



It is easier to keep up with the latest languages and development tools used in a specific area (this is the column of the programmers matrix) than to migrate to a completely different area, but using the same language (the row in the matrix). Why? Migrating to a different area–for example, from desktop applications to system programming–requires understanding new concepts of hardware architecture and interfacing. Nevertheless, you may like to migrate to a different area, perhaps when you feel that the new area interests you more or is more promising than your current area. For example, a person developing desktop application may want to start developing applications for embedded devices. But, please note that the learning curve for migrating across development areas may be longer.
Advertisment

There is no doubt about the power and flexibility of VC++. VC++ can be used to develop high performance and low-level Windows application programs. But desktop applications usually are UI (user interface) oriented, and can be more easily developed using VB. Moreover, a major factor influencing the use of VC++ in this area will be Microsoft’s .Net strategy.



Though VB .Net and VC .Net–the .Net extensions of the corresponding languages–also exist, C# is more likely to be a successor to VC++ in desktop development, because of its similar syntax, data structures, and strict object-oriented paradigm.

A veteran and an intermediate VC++ programmer should consider learning C# for developing desktop applications for MS platforms. The learning curve should not be long as most of the data structures and the object-oriented paradigm should be familiar.

A novice should immediately move to C#. As C# is still in its infancy, a good grasp of the language, and mastering the language should be easy for a novice.

Advertisment

In VB

VB still has time to go for rapid application development for Windows. But VB programmers should migrate to VB .Net over the span of a year. Optionally, you may consider migrating to C#. Since the syntaxes are quite different, the learning curve will be longer. But you can take your time.

In Java

Advertisment

Java has come a long way from being a language for Web applets’ development to a full-fledged language for desktop application development. A Java desktop application can run on different OSs. This platform independence is achieved through a software virtual machine that runs on top of the OS. On the flip side, Java applications showed low performance since they had to go through this additional software layer. The performance of Java desktop applications could not match that of desktop applications developed in native language like VC for Windows, C++ for Linux/Unix. This brought down the popularity of Java for developing desktop applications.

Still, Java is preferred to develop front-end for network and database applications, which intend to run in a heterogeneous environment. This could be an immediate field to migrate to.

Veterans and intermediates should keep an eye on C#. The aggressive boost given to C# and the .Net framework by Microsoft could give rise to a long-term career option.

The learning curve should not be long as the syntax of C# shares a lot of that from Java. The same advice goes for novices. Desktop application development in Java is simply not a promising field. So start mugging up the syntax of C#. Did we forget to say that their syntaxes are quite

similar?

Embedded programming

Embedded programming

In Assembly

Embedded application programming in Assembly includes using the native instruction set of the embedded device and building high-performance applications. Currently when embedded devices are in their infancy, assembly programming are well suited considering their low memory footprints and processing speeds. But the hardware constraint may not remain for long. We have marked this area as a long-term threat. The reason being that eventually high-level languages like C, Java or C# will take over as the language for embedded application development. Incidentally, the same has happened on the desktop There is no immediate threat for veterans and intermediates, but do keep an eye on languages like C, Java and C#. Applications developed in these languages can run on multiple embedded devices and might be preferred more than native applications in the coming years.

For novices we strongly suggest that you consider languages like C, Java, C#, as this is how you can stand out against the veterans in this field.

Network programming

In VC/C++

Though VC is well suited for network programming, the entrance of C# may change this. C# brings in the idea of Web services and distributed computing paradigms giving a new dimension to networking. Within a year, a VC/VC++ network programmer should try to acquire C# skills.

In VB

VB is more suited for desktop applications than network applications. Given the expected maturity of network applications in the coming years, whether you are a veteran, intermediate or novice network programmer, if VB is your preferred tool, you must consider a language like C# immediately. As the learning curve may be long (the syntax of the languages being quite different) you should start off immediately.

In Python, tcl/tk for desktop and network applications

Scripting languages like Python, tcl/tk are usually expected as an add-on skill from programmers. If you are only into these scripting languages you should learn a good programming language.

Web programming

Web programming

System programming

Desktop and embedded

We don’t see any foreseeable threat for those veterans who are into

system programming, whether for embedded or desktop platforms. Most of you

would be using Assembly and C/C++. If you program for Windows you would

probably be using MS VC/C++. All of you may, however, like to keep an eye

on embedded-system programming since this area seems to hold a lot of

promise.

You can bear the learning curve, as your current area is quite

promising. Intermediate and novice programmers can also carry on.

In C/C++

C/C++ has been used for server-side scripting as CGI languages. But such CGI programs had some technical drawbacks. Moreover, as the primary objective of C/C++ is not Web scripting, workarounds may be required even for routine tasks. The good news is that PHP–one of the most popular scripting language these days–has syntax very similar to C, resulting in a short learning curve. PHP is specially developed to be a server-side scripting language and routine tasks like retrieving data from forms, and database access, session tracking are a breeze with it.

We guess a novice wouldn’t be using C/C++ for CGI scripting, as Perl–another server-side scripting language (see below)–and PHP had been quite popular for more than two years.

If as a veteran or intermediate you are developing CGI scripts in C/C++ you must immediately start learning

PHP.

In VB/VC/VC++ (ActiveX)

VB and VC for Web mean development of ActiveX components. ActiveX components for the Web, which run in a Web browser to add interactivity, are no longer in great demand. Anyone working in this field has a migration path to developing ActiveX components for Windows desktop. With some knowledge of networking, you could also get into developing network components with ActiveX.

In Java

Java for the Web means applets on the client side–running in the Web browser and JSP or Servlets running on server side (CGI). Applets–primarily used to bring interactivity to static Web pages–have been overtaken by client-side scripting languages like JavaScript, VBScript and

DHTML.

If as a veteran or intermediate you are primarily into applet programming then you should start looking at other languages. 



If you want to remain in the Web segment, you can go for server-side programming with JSP or Servlets. You need to learn some new concepts and classes dealing with server-side programing. The learning curve here depends on how familiar are you with server-side concepts.

Alternatively, as applet development is generally done using AWT and Swing API, a probable area of promise would be front-end GUI development for network or database applications. The only thing you need to revamp is your limited GUI development repertoire with applets to full-fledged, UI-rich front-ends, which may require mastering more classes and methods.

While working with applets if you have coded expertise in those that facilitate network communication then it is easy for you to move to full-fledged networking in Java.

For novices, applet development is simply not a hot field any more. Please follow the same suggestions as above, albeit at a faster pace.

In HTML/WML

Writing static HTML pages has been automated these days, with the information stored in databases and put into pre-designed HTML templates, or using HTML authoring tools.

For those who are into developing static Web pages in HTML or WML, its time to make a quick, but hard move towards server-side scripting with PHP or ASP. If you have a fair idea about the working of the Web at the server side, you need to learn some programming techniques with these scripting languages. The learning curve may be long.

A viable option would be to learn XML. XML being a mark-up language may make you feel at home. These days there are ongoing projects on XMLizing data. Your familiarity with CSS (Cascading Style Sheets), would be of help in learning XSL, an advanced style sheet language for presenting XML data on the Web.

In VBScript/JavaScript/WML Script

Embedded apps

Other languages

C or C++ are preferred high-level languages for native application development for embedded devices. Also, Java-enabled embedded devices like mobile phones and PDAs have already made their debut. Java and its J2ME framework have matured enough for full-fledged development. C# is also targeting this area. So, embedded programming is a promising area. But since the platform is still in its infancy, do watch out for quick changes in its fortune.

VBScript and JavaScript are scripting languages used to bring dynamism at the client side, that is, in the browser. They are well suited for low speed browsing scenarios. But with broadband, full-fledged 2-D animation packages like Macromedia Flash or 3-D animation packages like 3-D Studio Max (for VRML) are likely to take over. Some applications of these scripting languages like client-side validation and mouseover animations can be easily done using standard Web-authoring tools instead of coding the scripts by hand.

Those using these scripting languages on the client should consider moving to server-side scripting with ASP and subsequently to ASP .Net. JavaScript as well as VBScript can also be used as languages for ASP scripting. With the syntax in place, you need to learn server-side extensions and how to interface with databases.

Alternatively you can go for the animation packages mentioned above, which obviously require some affinity for graphics and design, and could have a long learning curve for you.

The few who are into WMLScripting, must immediately take up server side scripting in ASP or

PHP.

In Perl

Perl is one of the most popular server-side CGI languages in use. The credit goes to its strong string manipulation features and support for regular expression. But PHP is being preferred over Perl these days for several reasons. PHP, from its early stages of development, is targeted towards server-side scripting. It is easier to handle HTTP data in PHP and connecting to different databases is easy. PHP can be embedded within HTML. PHP is faster than Perl. The bottom line is PHP is the latest in server-side scripting.

If you are a veteran or intermediate Perl programmer, you may not face an immediate threat due to PHP, but may like to consider PHP for your forthcoming projects. The learning curve should not be long, due to familiar syntaxes and due to having your server side concepts in place.

If you are a novice then we suggest that you skip from Perl to PHP.

In ASP

ASP is the de facto server-side scripting languages for Microsoft based Web servers mainly IIS. ASP scripters are in good demand. But the .Net framework has introduced ASP .Net, a new version of ASP for the .Net platform. So anyone into ASP scripting must learn ASP .Net, which should be a breeze.

Games programming

Games programming

Games programming is a very specialized field and there are only a few people into it, whose job should remain secure. One point to note is that, games programming is not very promising in India. If you are good at programming games then you should keep track of opportunities abroad. A game is usually developed by a group of developers. Some among them would specialize in a high level language like C, VC++ using DirectX or OpenGL API, some would be into optimizing the game using assembly instructions and a separate group of animators will design the game sprites and the environments.

Database front-end development 







In C/C++

Database front-end development in C/C++ is not very GUI rich. Such front-ends are still used in some banks, railways, etc, for simplicity but the preferred front ends are GUI based. So we suggest migrating to either VC++ or Java as they both have similar syntax.

On the Unix/Linux platform, however, C/C++ are preferred for front-end development. 






In Oracle Forms/D2K

Though Oracle forms and Developer 2000 are not hard-core coder tools, the popularity of Oracle database, and hence these front-ends, have made us include them in the table.

Oracle-forms development and working with D2K is itself a standalone profession. The popularity and the use of these tools are coupled with that of Oracle database, which now is no doubt the top-most and most used database system in the country. Nevertheless, a dedicated forms developer or D2K professional must learn a programming language like VB (simpler to learn), VC or Java so that they are not tied to the Oracle database.

Distributed computing







Though we have marked this as a separate area, distributed computing is actually a specialized field of networking. It includes Web services and peer-to-peer networking protocols. Peer-to-peer networking is quite popular these days, prominent examples being Napster and Gnutella. The idea of Web services is expected to be put into practice with Microsoft’s .Net and SunONE frameworks. Distributed-computing jobs demand fair amount of experience and for veterans or intermediates this area is quite secure.

The preferred language for implementing distributed computing is not an issue at the moment. So you can carry on with the language/s you currently use. 






Shekhar Govindarajan

Programming Area -language Matrix







Application/Area

Programming Language Used

System

Programming
Application

Programming
Desktop Embedded Desktop Embedded Network Web  Games Back-end

Database
Front-end

Database
Distributed

Computing
Assembly Y Y L

S

C/C++ Y Y S Y Y S Y S Y
Visual C/C++ Y Y M Y M S Y Y Y
Visual Basic L Y S S S Y Y
C#/VB .Net/VC .Net Y Y Y Y Y Y
Java S Y Y S Y Y
HTML/WML S
JavaScript/VBScript/ S
WMLScript
Perl L Y
PHP Y Y
ASP M Y
ASP .Net Y Y
JSP/Servlets Y Y
XML Y Y Y Y Y
SQL (Structured
Query Language) Y
Oracle Forms/D2k Y
Python/tcl/tk S S
Cobol S S
Y =  The skill set is secure
S =  Area under

immediate/short-term threat (Y-6 months)
M = Area under medium-term threat (6

months-1 year)
L =  Area that holds value for

at least 1 year
Advertisment