Today, there's a whole bunch of software development professions and a front-end developer will most likely not consider an embedded developer his/her colleague, although both do programming.
So, let's review the major types of software development and skills required by each. I've figured 6 types and here they are:
- Embedded development
- UI development
- Front-end development
- Web development
- Mobile development
- Enterprise development
Of course, there're other types such as automation QA, DevOps, etc, but we'll review them later, as they're actually adjacent to each type listed above.
Check out a related article:
So, what does a choice of a programming language or technology depend on?
- Market share, i.e. number of open vacancies and salaries in a given market
- Future opportunities (will this profession still be in-demand in the future or will you have to acquire a new one?)
- Barrier to entry (how steep is a learning curve? how likely is it that a junior developer gets hired easily?)
Now let's review software development types based on these parameters.
We're living in the IoT and connected world and any modern gadget now has more chips and sensors than most of PCs. Any type of machine to machine (m2m) and machine to human (m2h) communication is enabled through embedded development. That being said, any electronic device, be this an e-cigarrete or a TV set, operates on software that someone has to program. That's what embedded developers actually do.
The main programming language used for embedded development is C++, although assembler and Java are used, too. However, a deep knowledge of hardware is critical for this type of development, which increases barrier to entry.
Today, embedded development is often referred to as IoT development and it means this type of development is very prospective! Besides passion for and in-depth knowledge of sensors, actuators and microcontrollers, embedded developers should have advanced experience with most of the IoT platforms available today such as Arduino, Intel Galileo, Apple's Home Kit and others.
While many people still don't understand the difference between a front-end and a UI developer, there's a difference indeed!
Check out a related article:
Successful front-end developers would often have traits of good UI developers. They see a page as a collection of assets and pay particular attention to detail and coding in a modular fashion. They constantly analyze how the assets will be used on the page and how they might be used across the entire site.
Mobile development (Android and iOS)
Although Android and iOS development uses different languages, I've combined them together as Java-based development for Android is closer to iOS development with Objective-C and Swift than to Java-based development for the enterprise.
So, what do we have in this segment? A relatively low entry barrier, because making a DIY mobile application is very easy these days and is affordable to literally every student. And this type of development is the most in-demand now, which results in the lack of sufficient resources and ever growing salaries.
Enterprise development refers to development of applications and integrated system management tools for large enterprises. In short, all of the enterprise apps share a few common traits:
- High dependency on the specialty (industry, niche) and high level of solution's complexity
- Very Big Data - terabyte databases, gigabytes of transmitted data files, etc
- Many legacy systems, i.e. out-of-date corporate systems still being in use, that should be integrated with as well as supported, upgraded and extended. That's a true nightmare for a developer!
- A lot of external integrations with 3rd party systems. The average enterprise project is incorporated with 3-5 external systems.
- Strict requirements for fault tolerance and transactions security (which is obvious because one transaction may contain data about a multibillion deal!)
- High cost of making any changes. Each tiny change may have a tremendous impact on the whole system functionality including payments processing. Each deployed change should be tested against many different scenarios which is another nightmare for developers!
- High change resistance. Because many enterprises are largely bureaucratic and hierarchical, it can be very difficult to get an enterprise-level buy-in for using innovative systems and frameworks for project's optimization and facilitation. In the average enterprise you won't likely find any software built later than 5 years ago.
Today, there're two key enterprise development platforms: .Net and J2EE (Enterprise Java). While both platforms are rather "live and kicking", Java still prevails because the majority of large enterprises prefer using Unix-like servers that are only J2EE compatible. There's a small corporate segment that still uses .Net, and it's mostly affiliated with Microsoft programs.
So, does a .Net developer still has a chance as far as future enterprise development is concerned? Let's take a closer look:
- Dot Net salaries are some of the highest in the market to date (.Net ranks top 2 best paid technology after Java)
- Entry barrier is lower than that of Java, especially if you have at least some previous experience with Microsoft app development
- No alternative development environment. .Net technology is a Microsoft technology so whatever tools are available are all Microsoft tools. On the one hand, the lack of alternatives simplifies development, but on the other hand - it deprives of flexibility.
And what about Java Enterprise development opportunities?
- Java Enterprise developers have the highest salaries on the market
- Java Enterprise has the highest entry barrier on the market
- Java Enterprise allows for solving complicated issues and offers the broadest range of specialties
It's worth noting that Java Enterprise isn't always about programming. Very often, J2EE developers are responsible for application's setup and configuration on a powerful distributed server cluster. And the most important thing is that Java Enterprise developers usually grind data pools in such amounts that it normally takes them as much time to learn a new programming language as it takes to learn a new J2EE library.
For the most up-to-date software developer salaries report, please contact Intersog!
Have anything to add to this post? Please leave a comment below!