The Challenges and Struggles Software Engineers Face Today

As cliche as it may sound, Software is indeed everywhere. What Marc Andreessen wrote then under ‘Why Software is Eating the World‘ has exploded even more today. Companies are racing to be at the forefront of the digital revolution. There’s even talk of how software development can become so mainstream that it will be the next blue collar job. And one day soon, come the age of flying cars and trips to the moon software will power almost everything that’s out there.

In Sri Lanka, thousands join the IT industry as Software Engineers every year. It’s a thriving industry with goals of reaching USD 5 billion in revenue by 2022. So with the coders here to stay, we asked a few of our own developers what they feel are the biggest challenges and struggles they face either as engineers at a personal level or from the industry. Check out what they had to say below:

SAGARA PARANAGAMA

On whether he feels the software industry faces any major threats…

I personally don’t feel that currently the software engineering field is threatened. Of course, political instability is a risk and because the Sri Lankan software industry is mainly service oriented rather than product oriented, a stable policy making body is essential. However, if we look 20-25 years ahead, coding will be a mainstream skill in the labor market. This would be the case in developed as well as developing countries. Therefore, the main attraction of cheap software engineering in countries like Sri Lanka will fade away. Our software industry has to move from service oriented to product oriented in order to have positive cash flows and survive.

Moving on, the word struggle insinuates a negative connotation so don’t blame me for being negative. There are work related struggles as well as personal struggles working in this field.

Finding a good boss…

I’ve been lucky to have excellent team-leads, who are open minded and open to new things. There have been many instances, where the whole team discuss an issue and arrive at a decision and the process has uplifted the knowledge and confidence of the whole team. Contrast that with a lead, who does not listen to the team and makes decisions without any room for discussion. It can be annoying and demotivating. Unfortunately, finding a good lead can be difficult and therefore, I regard this as a struggle.

Keeping up with technology…

This is one of the most underrated issues in software engineering. Technology is moving at an incredible pace. APIs change regularly. New frameworks come up saying it would make our lives easier (ironic, I know). Simply put, if we don’t improve our knowledge, we lose the race.

Personal issues that can bring you down…

This mainly applies to software engineers working in Colombo, who come from other districts. No one really understands what it means to be away from home, stuck in a room in weekdays, eating unhealthy food. You really start questioning why you are doing a job in the first place. Honestly, it’s a struggle to find a good place to eat in Colombo (a place that is good for your wallet too). Paying rent, stuck in traffic jams wasting your fuel… you get the picture. People originally from Colombo fortunately go to their homes at least. As a software engineer, it’s best when your employer understands these issues. That your compensation not only considers the work you do for the company but also the sacrifices you make in order to do so…

Sagara Paranagama is an Associate Tech Lead at Zone24x7. You can follow him on LinkedIn and Twitter.

*****

YOHAN GOMEZ

On unrealistic expectations put on software engineers at times…

How do we define a perfect developer? One of the most common myths, which I see in our industry is that the belief of “I, as a developer needs to know everything”. Knowing everything is not realistic. Having a toolkit with hundreds of tools doesn’t make any sense if you use only couple of tools out of them. You might end up not knowing anything properly. Focus towards concepts and principles, master them when it comes to applicability.
                            
If you are to use a framework for quite some time then you will have to memorize certain things, other than that don’t try to memorize any framework methods or API’s, which will depreciate over time. Knowing the capabilities is more than enough. Google is your friend, use it properly. Be a smart developer.

If you are developing a legacy application, it doesn’t make any sense to adopt latest technologies just because of the trend. There are several frameworks and technologies, which does the same thing in different ways and the developer community always claim that there is something better than what you are using at the moment. I think there is no point of adopting technologies just because they claim to be the best or there are performance improvements.

As the initial step, think whether there is anything, which you need to achieve that your current framework doesn’t support. When a framework or library claims about performance, always think whether you need a performance gain, whether you have any performance concerns in your project. Don’t rip apart and re-write your code unless there is a valid reason. Be smart when it comes to technology adoption and use it when it actually solves a problem. Think of the community support and all the other factors before adopting a new technology.

Yohan Gomez is an Associate Tech Lead at Zone24x7. You can follow him on LinkedIn and Twitter.

*****

CHATHURANGANIE PATHIRAGE

On the need to focus on the domain and business value…

There are some typical challenges that software engineers face on a day-to-day basis, both on and off work. From a work perspective, we need to improve in seeing things from the client’s’ perspective, as we frequently see incidents of misunderstanding, knowledge gaps and miscommunication. Quite often, we as software engineers tend to focus too much on the technical aspects and bypass the business value and the domain knowledge.

Software Engineers don’t have a life?

Apart from work challenges, there’s always the typical complaint – ‘software engineers don’t have a life!’, which merely accounts to the challenge of maintaining a healthy work-life balance.

I think this is quite subjective and is not eternal. There are times during our projects, where we need to give extra time and effort to our work, in order to meet a commitment to a client. Furthermore, our tech world is fast moving as technology stacks evolve faster than we can absorb them. In order to survive and grow our careers, we need to spend time to be up-to-date on these evolving technologies.

When someone looks from the outside, it may look like ‘we don’t have a life’. But from my experience, I see that almost all of us have found our rhythm by now – to work, to develop and at the same time, to enjoy our lives the way we want. Anyway, for all that’s worth, it’s not only the software engineers who find it difficult to find a work-life balance, it is almost every working man’s dilemma.

Winning the parents. With time, they will adjust…

During the very early days of my software engineering career, one of the biggest challenges I (and most of us in our generation) face is how to convince our parents and make them understand this lifestyle. There would be days you go home at 10PM, open your laptop soon after a quick dinner and start working till midnight, only to rush back to work early next morning. Add to that a full weekend at work and then the fun begins. You would continue to hear endless speeches about the importance of family time, taking care of yourselves, without working 24X7!

This is mainly because, the way, they used to work is somewhat different from how we do things in this age. It’s pretty difficult to convince them about this drastic difference. If you ask me, there’s nothing you can do; with time, they would just come to terms with it – just like we did.

Chathurangani Pathirage is an Associate Tech Lead at Zone24x7. You can follow her on LinkedIn.

*****

MAYOORAN MACILAMANY

I have been working as a developer for more than two years now and the one thing that keeps me going is the fascination of creating something new every day! But there are two sides to a coin. Yes, the perks of being a software engineer has is its own challenges, or should I say “struggles”!

The inevitable struggle for quality…

That one struggle, which is inevitable is the fine line between conformance to best practices and premature optimization! With all the emphasis that is placed on best practices, it is easy to get carried away with that. You could be tempted to rewrite that ‘for loop’ or remove that ‘single use variable assignment’, but remember this: You may end up writing code that is unreadable.

But then again, you may also end up with untestable code as a result. The struggle of choosing the right option is real! You could choose to “not do something” or “not do it yet”. You should not forget that this is an engineering discipline and that the success of the project depends solely on the quality of the code you deliver!

On how he keeps up with all the rapid changes in technology…

Technologies change every day! You should have the natural will to engage in active learning and strive for excellence. Obviously, you may not be able to keep track of each and every advancement in all the areas of programming. Which, in return results in the need to choose your area of interest and follow the developments in that.

Not everyone gets to work with the technology stack they love. Even if the opportunities have not been presented yet, it is mighty important to keep learning and practicing the things you love. Because, you never know when the opportunity will come knocking on your door. Mastering a language or a technology could prove to be difficult, if you do not back yourself and predict the future developments based on the current context. The struggle could prove to be immense, if you lose your direction in an industry that changes every day. Trust your instincts, take a leap of faith and let your effort determine your success!

Back to work life balance as a software developer…

The biggest struggle of them all would be time management. Let it be completing a project on time, or spending time with your family. If you don’t get a hold of how you manage your time, you might start to lose focus and purpose. It is crucial that one provides proper estimations for projects as unrealistic schedules could easily result in burnouts and unnecessary stress. It is important that we keep up with the estimations as timely delivery is a vital factor that determines the success of a project. It is important to allocate time to learn new things and enhance our knowledge base as mentioned earlier as well.

Amidst all this, it is a must to ensure that quality time is allocated to be spent with the family. Whether it’s your growth in personality, success in your job or satisfaction in your life, how you manage time determines, where you end up.

Work flow based programming and the threat they represent…

Like any other industry, software engineering has its threats as well. The rise of work flow based programming tools could be seen as one. The development of work flow based programming tools may have reduced effort and time. But it is important that engineers keep their engineering skills sharp despite the introduction of auxiliary tools. The industry has to ensure that it doesn’t end up with a pool of developers who have only specialized in workflow tools.

Having core programming skills and firm understanding of a language is very important, as the languages you know determine your thinking patterns and how you approach solving problems. Oh yes, the Sapir-Whorf theory you saw in the movie “Arrival” could very well apply to programming as well!

First to market is good as long as you have something really solid…

Increased emphasis on quick releases and aggressive marketing strategies could be seen as another threat. Focus is placed on releasing the product at the earliest time possible, so that we could satisfy the demand and capture the market, before someone else does. This could result in premature releases of products that are not ready yet.

A perfect example could be the app that took the store by storm, Pokemon Go. The app was released with quite a few glitches and bugs, which resulted in players circumventing to excel in the game. The app also failed to deliver the most important features that were shown in the trailer such as player vs player battles and trading.

This resulted in a lot of people getting disappointed and easily bored with the very few features, it was released with. The team itself has admitted that the urgency in releasing the product, resulted in such setbacks that could’ve been avoided. It is important that quality of the product is given the priority and that proper testing is carried out despite the unrealistic timelines.

It is important that the engineering practices don’t take a hit because of the limelight on marketing and business development strategies. The challenges and complexities surrounding the development processes need to be understood and engineers should be encouraged to focus on quality and disciplined practices.

They say “do it with passion or not at all”. Every job has its own struggles. What determines whether we succeed or not, is how honest we are to our profession and how determined we are towards achieving excellence. When you think of the view from the top, struggle of climbing up is nothing!

Mayooran Macilamany is a Software Engineer at Zone24x7. You can follow him on LinkedIn. He also blogs at Frozen Cloud.


Image Courtesy: Header image from unsplash.com/@jillheyer

The Road to JavaScript Web Applications

This week in ZoneCast . . .

The Road to JavaScript Web Applications is a 4 part series where Yohan Gomaz, a Senior Software Engineer, takes you through the different stages of building a JavaScript Web Application from scratch.

(If you are interested in learning more about the evolution of JavaScript and its foray into web and mobile applications, check out The Rise of JavaScript).

Part 1: Setting Up your JavaScript

In part 1 our hosts, Awad and Isuru begin the journey by discussing the initial steps that you need to take in building a JavaScript Web Application. The discussion spans into ECMAScript, browser selections, tools and techniques, performance and much more. Listen to Part 1 below:

Discussion Breakdown

What to consider first – 00:56 | ECMAScript – 01:40  | Next step after selecting the browser – 02:42 | Does the environment require any thought – 03:16 | Any other tools that needed when setting up the project – 05:39 | Open source contributions by Yohan – 07:50 | Adding a carousal to the page – 08:24 | Does the performance differ based on the libraries used – 10:10 | Linking options through a CDN compared to a package manager – 11:12 | Issues with including CSS and JavaScript manually – 12:44

Part 2: Pitfalls and Best Practices

In Part 2, we explore, as the title suggests the common pitfalls you face when building a JavaScript Web Application and Best Practices you need to adhere to. Yohan wanders into script tags in index.html files, Document Object Models (DOM), ReactJS and Virtual DOM, coding standards and more.

Listen to the episode below:

Discussion Breakdown

Defining variables in the script tag and its problems – 01:08 | Script tags in an index.html – 06:07 | What is DOM and how it works – 11:48 | Best practices and pitfalls in manipulating DOM – 13:56 | DOM manipulation functions and ReactJS – 19:52 | Adhering to coding practices – 23:23 | What is Linter? – 29:00 | Useful references to learn JavaScript – 29:42

Part 3: Testing your Application

In Part 3, our hosts Awad and Sasitha discuss about Testing with Yohan. The topics they cover include front-end testing, the types of Testing, frameworks and tools to use and much more. You can listen to the episode below.

Discussion Breakdown

Front-end Testing – 01:01 | Types of Front-end Testing – 02:03 |  Difference between Integration Testing and Testing API – 04:30 | Frameworks and Tools – 07:11 | How to start Front-end Testing – 09:30 | Headless Browser – 13:35 | Verifying the UI – 16:06 | Coverage Reporting – 18:34

Part 4: Front-end Build Tools and CI

In the final episode of ” The Road to JavaScript Web Applications”, Yohan will be looking into build processes and Continuous Integration for front-end applications with our hosts Isuru and Ramitha.  At the end of this episode, you are in a good position to build a simple JavaScript Web Application on your own. So listen below and get busy coding. Good Luck!

Discussion Breakdown

Build Work Flow and Tools for Front-end – 01:05 | Options Available for Front-end Build Tools – 02:33 | Areas a Build System should Cover – 03:25 | Source Maps – 12:09 | Tools that Facilitate CI/CD Environment – 19:07 | “We should always go for the latest available tools and their versions of JavaScript”. True or False – 20:35


About ZoneCast: Simply put, ZoneCast is a podcast about technology. Listen in and discover all the tech that is brewed inside Zone24x7 and the many passion projects of our associates. To listen to previous ZoneCast episodes check out ourZoneCast SoundCloudPage.

Image Courtesy: Header image from unsplash.com/@forrestcavale

Yohan Gomez

Yohan Gomez was a Data Engineer – Frontend at Zone24x7.

The Rise of JavaScript

The leap beyond browsers into mobile,
desktop applications and more

There was a time when the word JavaScript reminded developers about form validations in web pages. Things have changed since then drastically. JavaScript as a language evolved over time and now it’s used in more places than ever before. This article will explore what are the areas a JavaScript developer can explore today and what it means to be a JavaScript developer in 2017.

If we look back in time, JavaScript was created for Netscape Navigator by Brendan Eich. The confusing name “JavaScript” was given to the language just to get the attention of developers by utilizing the popularity of Java at that time. When the language specification was written, it was named as ECMAScript. ECMAScript went through several revisions to make the language more approachable. ECMAScript 6 is one of the major revision to the language since its last revision on 2009. ECMAScript 6 introduced several new changes to the language including the ‘class’ keyword to make object orientation straight forward.

Image Courtesy: Calvin French-Owen at segment.com/blog

Node.js: A Change in Perception

For quite some time, JavaScript was a thing that was used only in browsers until Ryan Dhal, the creator of the Node.js, had the awesome idea to make JavaScript run outside of the browser. Ryan Dhal demonstrated Node.js to the world on November 8, 2009 at European JSConf. The introduction of Node.js changed the perspective of the language entirely. A language that was once seen as a toy language performing client side form validations then became a language that is capable of handling millions of requests per second in a server side application with ease.

Node.js also gained popularity as a tooling platform. Modern web application development tools like Grunt, Gulp and Webpack relies on Node.js. to do the heavy lifting.

After the introduction of Node.js, the JavaScript ecosystem grew faster than ever. npm, the default package manager for Node.js, is one of the fastest growing package manager in the planet.

Domination of Front End Frameworks

Nowadays web applications have considerable amount of business logic in the client side. The amount of code written in client side imposes new challenges such as how to architect, write and maintain thousands of lines of JavaScript. With the rise of frameworks such as AngularJS and ReactJS, web applications are able to deliver compelling experiences to users than ever before. These frameworks also help to write maintainable code.

Opinionated frameworks such as AngularJS is a one-stop shop, which comes equipped with various components to build a fully-fledged front end application. Angular contains modules, which could help with fetching data from the server, to manage business logic and many more. On the other hand, libraries like React are less opinionated and just does one single thing well, which is rendering the view and let developers rely on other libraries to accomplish different concerns. For example, since ReactJS is just a view library, in order to talk to a server to fetch data, developers have to rely on some other library. It’s up-to the requirements and the developers to choose what framework best suited for them.

Apart from the very dominant frameworks like Angular and React, there are several other frameworks which managed gain attention as well. VueJS is one of notable framework that gained a lot of attention from the JavaScript community. VueJS combines the good pieces of Angular and React yet keeping the framework simple and lean.

Today there is Angular, React and Vue. Tomorrow there would be couple of new once. Try to stay away from framework arguments and pick what suits you the most for your requirements and stick with it.

Thousands of Lines of JavaScript Means the Dawn of New Challenges

JavaScript is a dynamic language and it could be difficult to manage a huge codebase when there are multiple developers working in a team. Developers could feel unproductive due to the lack of support from tools such as Intellisense in the editor. Refactoring a large JavaScript codebase can be tricky since editors would not be able to help much like they do with a statically typed language such as Java or C#.

This is where TypeScript comes to rescue. TypeScript is an implementation on top of JavaScript, a superset of JavaScript, which introduces a type system. TypeScript was introduced by Microsoft and it has been widely adopted by various teams as a viable mechanism for implementing scalable JavaScript applications. It’s worth mentioning that Angular 2, which is a framework from Google, is written in TypeScript and the Angular team recommends to use TypeScript when developing Angular 2 apps.

TypeScript is not the only thing that is trying to make JavaScript more manageable. Flow, a technology introduced by Facebook, is a type-checker for JavaScript. Flow allows you to add type annotations to your existing JavaScript file, where TypeScript is a language of its own.

Hybrid Mobile Applications are a Thing of the Past

Apart from browser and server side applications, JavaScript is better known also in the area of hybrid mobile applications. A single JavaScript codebase could be used in multiple mobile platforms saving time and cost.

Even though hybrid applications are a great option when considering time and cost, in terms of performance, it always been a concern. Since hybrid applications are a web view rendering the UI, obtaining native like performance is a challenge.

Image Courtesy: cdn-images-2.medium.com

This is where technologies like React Native and NativeScript comes into play. With these technologies, we can still write the application in JavaScript but get the performance benefits similar to a native application. Technology like React Native renders native UI views depending on the platform, providing the end user with the native rendering performance while allowing the developers to write the application in JavaScript.

Taking Over Desktop Applications

Writing cross platform desktop applications was a nightmare few years ago. JavaScript has changed the desktop application development landscape too. For example, Electron is a technology introduced by GitHub. Electron is a shell, which uses Chromium browser to render the UI elements and uses Node.js to access the file system and other native APIs, where a typical sandboxed browser based application would not be able to. This allows developers to build the UI of the desktop application by making use of the wide ecosystem of web frameworks and also enable file system access and many more native functionality, through the native APIs exposed by Electron.

Electron has been gaining a lot of attraction lately. Electron is the technology that powers the Atom editor of GitHub and GitHub realizing its potential, decoupled the shell and open sourced it as a standalone platform. Now Electron powers various applications, including Visual Studio Code editor from Microsoft and the desktop version of Slack.

JavaScript in 2017 and Beyond, the Programming Language of the Future

The days, where JavaScript was considered as a toy language is long gone. Today, JavaScript is a language, which can run in browsers, servers, mobile devices, desktop applications and even in embedded devices powering IoT use cases.

As I see, JavaScript is a language that is going to be here for a long time. It’s going to be a language, which truly breaks the platform barrier and allows developers to solve problems in various platforms.

It’s an exciting time to be a JavaScript developer. Feeling like diving in-depth to JavaScript? Take a look at the awesome book series titled You Don’t Know JavaScript. You might also be interested in checking out our 4 part series on building JavaScript web applications from scratch called The Road to JavaScript Web Applications.