Categories
Tips

Developer prizes: Look who’s won in our 20th-anniversary survey prize draw and Referral Program.

We’re super excited to announce the winners of our 20th Developer Economics prize draw. Thanks to over 19,000 of you who took the time to contribute to the developer ecosystem!

If you’re new to our prize draws, developers who take our surveys earn 100 points for every new survey completed, plus 10 points for providing their feedback about the survey. You can see the list of benefits and rewards here.

General Prize Draw

The State of AR/VR Survey Prize Draw

Exclusive Community Prize Draw for members with 801+ points

exclusive community prize draw 801+ points

Exclusive Community Prize Draw for members with 801+ points – Prizes: Vouchers, branded stickers, water bottles, surprise swag, and socks

Exclusive Community Prize Draw for members with 501+ points Prizes: Vouchers, surprise swag, branded stickers and socks

Exclusive Community Prize Draw for members with 301+ points Prizes: Branded surprise swag, stickers and socks

Extra Prize Draws

Early Bird Prize Draws

Christmas Advent Draws

Last Minute Extra Prize Draw

We’ve reached out to winners directly via email. If you recognise your email address but believe you haven’t been contacted yet, you can contact us here.

The lists above only include prize-draw winners and not runner-ups. If the prize draw winners do not claim their prizes within 10 workings of us contacting them, then runner-ups will be invited to claim them instead. 

Special thanks to our prize sponsors SitePoint, DeveloperWeek, Basecode, Sketchfab, HTB Academy and @Coding for donating prizes to the survey! Are you a company interested in giving away a prize to developers in our next survey? Get in touch!

If you’re not a winner, don’t despair, our next survey, our 21st will be live later this year. We’re already on the hunt for some amazing prizes, and open to your suggestions. What prizes would you like to win? Drop us an email or send us a Tweet.

To ensure that you are notified when our next survey is live, sign up. Don’t forget to make sure the survey notification option is ticked.

Referral Program Winners

Over 2,600 developers joined our Referral Program and 270 were especially competitive in promoting our survey to their communities. Thanks to everyone who took on the challenge! If you want to test your influencer abilities in our next survey, make sure you join our Referral Program. Without further do, here are the top 50 winners:

Want to take part in our next surveys referral program? You can sign up here.

Categories
Tips

Five frontend books you should read in 2021

What skills are you planning to learn as a frontend developer this year? Our friends at Packt have shared five frontend books you should read in 2021. 

React and React Native

A complete hands-on guide to modern web and mobile development with React.js

What reviews say:

“I have books in my library older than most of the people I work with, maybe 200+ at this point and I would put this among the top 10 for content. Great book if you’re looking to get into React and/or React Native and the follow-along code samples actually work – big kudos!”

Svelte 3 Up and Running

A fast-paced introductory guide to building high-performance web applications with SvelteJS.

What reviews say:

“This is not just a book about Svelte. Sure, you do build an app using Svelte 3, and while building it the author gradually (and with clear examples and explanations) introduces the concepts and syntax of the Svelte framework.

However, what I enjoyed the most about this book was how it was a practical guide for building static web apps. You’ll start with some overview of why static web apps (or JAMstack apps) are powerful, and then you get on to building. From setting up VS Code, all the way to production… and even with automated testing and DevOps!”

Learning Angular, Third Edition

A no-nonsense beginner’s guide to building web applications with Angular 10 and TypeScript.

What reviews say:

“This book is typically useful for any front-end or full-stack software engineer who is completely new to the web development or has some JavaScript web development experiences but wishes to jump into the Angular world playing with the typescript.”

Modern Web Testing with TestCafe

Get to grips with end-to-end web testing with TestCafe and JavaScript.

What reviews say:

“This is a very good book for

– Beginners who are looking for step by step clear instructions to use TestCafe right from setting up the environment all the way to writing expert level e2e automated tests

Current TestCafe users to learn TestCafe internals and best practices.

The other aspect I like about this book is, it also provides compares between Selenium and TestCafe. This is very helpful for current Selenium users trying to switch to TestCafe and best use the benefits TestCafe provides.”

Vue.js 3 Cookbook

Discover actionable solutions for building modern web apps with the latest Vue features and TypeScript.

What reviews say:

“This book is a good introduction to Vue.js 3.0 and the main features which vue.js contains. The book contains a lot of examples, which gives you a good overview of the different possibilities that you have when working with vue.

For example, it discusses about vue files, plugins, vuex store, mixins, decorators, props, slots, vuelidate, and vue router, among others.”

Have you read any of these books already? Do you have other titles that you’d recommend? Share your thoughts in the comments.  Looking for more inspiration? Here are more book recommendations.

Be a guest writer on our blog
Have you got brilliant tips and resources that developers love to read? Then we want you on our blog! Find out more.

Categories
Tips

Eight must-read books for developers in 2021

What are the top books on your reading list this season? Whether you’re learning a new skill or adding depth to your existing knowledge in a particular development area, it’s always a good idea to get a few more recommendations to your list. We’ve teamed up with Packt to help you discover eight must-read books that you need to add to your collection in 2021.

All Packt eBooks and Videos are for $5! A key part of Packt’s mission is to unlock new opportunities for developers and help put software to work in new ways. They want this year’s $5 campaign to help developers unlock new opportunities.

Cloud and Admin

Azure DevOps Explained

Implement real-world DevOps and cloud deployment scenarios using Azure Repos, Azure Pipelines, and other Azure DevOps tools.

What reviews say:

“The book is very carefully walking the reader through everything you need to know to become an Azure DevOps expert. I use DevOps all the time to build and manage Business Central AL development and found the book very useful.”

Kubernetes and Docker – An Enterprise Guide

Apply Kubernetes beyond the basics of Kubernetes clusters by implementing IAM using OIDC and Active Directory, Layer 4 load balancing using MetalLB, advanced service integration, security, auditing, and CI/CD.

What reviews say:

“This book covers most of the topics when an enterprise would like to adopt Kubernetes. What’s more, you hardly can find coverage on these topics in the market!”

Coding and tools

Learning C# by Developing Games with Unity 2020

Get to grips with coding in C# and build simple 3D games with Unity from the ground up with this updated fifth edition of the bestselling guide.

What reviews say:

“If you’re serious about learning to build games in Unity your progress will be advanced rapidly if you first have a solid foundation of understanding of C#. This book explains the necessary information to start understanding and using C# to develop games in Unity. After reading this you’ll have enough context to begin tearing down other people’s code and repurposing it to build your own functionalities for your game.”

iOS 14 Programming for Beginners

Learn iOS app development and work with the latest Apple development tools. Explore the latest features of Xcode 12 and the Swift 5.3 programming language in this updated fifth edition.

What reviews say:

“The author does a good job to capture an effective, quick, and breezy reading/learning/code-along experience. The explanations are concise and easy to follow, although I would imagine a complete newbie to programming entirely might ask a lot of questions in the earlier chapters.”

Data

Learn Amazon SageMaker

Quickly build and deploy machine learning models without managing infrastructure, and improve productivity using Amazon SageMaker’s capabilities such as Amazon SageMaker Studio, Autopilot, Experiments, Debugger, and Model Monitor.

What reviews say:

“This is a comprehensive book for a data scientist looking to use the AWS ecosystem for machine learning with a focus on Sagemaker. I like the way it is organized which is practical and matches a typical life-cycle of a project.”

Data Engineering with Python 

Build, monitor, and manage real-time data pipelines to create data engineering infrastructure efficiently using open-source Apache projects.

What reviews say:

“Data Engineering With Python provides a solid overview of pipelining and database connections for those tasked with processing both batch and stream data flows. Not only for the data miners, this book will be useful as well in a CI/CD environment using Kafka and Spark. It’s very readable and contains lots of practical, illustrative examples.”

Programming

40 Algorithms Every Programmer Should Know: Hone your problem

Learn algorithms for solving classic computer science problems with this concise guide covering everything from fundamental algorithms, such as sorting and searching, to modern algorithms used in machine learning and cryptography.

What reviews say:

“Who the book is aimed at: if you self-identify as a data scientist, serious algorithms specialist, or even the quant type, then you won’t be disappointed! If you’re just starting in the field, the author has done the hard work of selecting some of the commonly used techniques & algorithms in the field today.”

Learn Quantum Computing with Python and IBM Quantum Experience

A step-by-step guide to learning the implementation and associated methodologies in quantum computing with the help of the IBM Quantum Experience, Qiskit, and Python that will have you up and running and productive in no time.

What reviews say:

“I really like this book. It takes a step-by-step approach to introduce the reader to the IBM Q Experience, to the basics underlying quantum computing, and to the reality of the noise involved in the current machines. This introduction is technical and shows the user how to use the IBM system either directly through the GUI on their website or by running Python code on one’s own machine.”

Have you read any of these already? Leave your impressions in the comments and don’t forget to share the list with other developers in your circle!


Be a guest writer on our blog
Have you got brilliant tips and resources that developers love to read? Then we want you on our blog! Find out more.

Categories
Tips

10 Minute Comprehensive Guide on Modern Software Development with Agile Methods

When it comes to custom software development, Agile methodology is preferred because it focuses on the requirement of the customer and fast delivery.  The principles are applied to small software products developed by a single team, as well as big ones developed by programs that consist of more than ten teams.

The goal of any software development company today, as well as the clientele, is producing software at the lowest cost possible, in the shortest time and the best quality. The right planning and management of the development process and the correct methodology are critical to achieve your business goal. The Agile Methodology is a growing trend that’s exponentially growing.

Agile methodologies have helped many business organizations respond to the evolving market conditions fast, boost customer satisfaction, and boost efficiency. Still, so many organizations are facing hardships in comprehending and adopting Agile. For your brand to overcome the challenges, let’s check out an extensive guide explaining everything about modern software development with Agile methods.

Who is this Guide for?

This guide is intended for:

✔ anyone who wants to learn all the ins and outs of the agile methodologies

✔ anyone who seeks out knowledge on what agile is and why it’s monstrously awesome

✔ anyone who’s afraid of adapting the methodologies in their next software project

Your Comprehensive Modern Software Development with Agile

An Overview

Most of you probably already know that Agile has taken the world of software development and testing by storm. The majority of organizations are already practicing the software development methodology in some form. Agile, in simplest terms, is a way of managing projects.

It’s worth noting that although the approach could be used for just about anything, it was nonetheless founded originally in India. Unlike the Waterfall approach in which all the requirements are gathered from the start, and design is all done next, and then development is executed, the Agile method enables designers, developers, analysts, and stakeholders to work together simultaneously.

Traditional Waterfall Approach Limitations

The Waterfall Model was presented first by Winston Royce back in 1970, and it was intended to be used in developing government projects. It was called a waterfall because of its cascading activities with phases, which keep the development process going forward. Because of this nature, the model does not leave room for doing unexpected changes.

Making changes would be difficult and demands a lot of work as well as a waste of money and precious time. Furthermore, it also excludes the client from the project because its focus is mainly on the internal team. Today, clients want to be involved in the development process as much as possible, and since the Waterfall Model pays so little attention to the client involvement, this could mean high change requests in the development later on.

Agile—How it Works

In contrast to the traditional Waterfall Method, Agile Methodologies adhere to the iterative approach. Basically, Agile software development involves several cycles, typically called ‘sprints,’ which are individually designed, developed, and tested. To put it simply, consider every sprint as a miniature project with its own phases of design, backlog, development, testing, and deployment within a predefined work scope.

A possibly deliverable product is shipped at the end of every sprint. Simply, with the completion of each iteration, new features are being added to the main software, resulting in software growth.

Agile Misapprehensions

Even though Agile has been majorly adopted all over the world, still there remain misconceptions about the approach, including the following:

1. It’s very different

Agile could be an entirely new concept to your organization and the entire team. It also demands a bit of rewiring regarding how all stakeholders would remain on the same page during development. Nevertheless, all companies that adopt the methodology know that the new approach runs the entire development cycle smoothly and consistently.

2. It’s unpredictable

It could indeed be unpredictable at times. But it’s the same with other development approaches. Honestly, it’s entirely impossible to determine what the software should be at the start of the development exactly.

Nonetheless, unlike the traditional approach, Agile embraces unpredictability and uses it to its own advantage that leads to producing better outputs.

3. All features are prioritized by developers

There are still some people who believe that with Agile, developers decide what’s relevant, what must be implemented, and when. However, this is far from the truth since, at the start of every sprint, there is always an extensive spring meeting in which all stakeholders get to participate and decide the features that would be developed and delivered.

4. More short-term-focused

It’s hard to understand why, but some still believe that since the Agile approach splits up projects into short sprints or iterations, it doesn’t consider the long-term goals. The Agile methodology, in truth, provides a lot more benefits and provides a better way than the traditional one. Furthermore, earlier testing lets you indirectly make better decisions for your long-term goals.

5. Works only for Software and Developers

Indeed, it started out in the tech industry, but today, as it benefits an organization as a whole, it’s widely accepted even in non-software industries, such as in the field of communication, manufacturing, healthcare, and so on.

The Actual Benefits of the Agile Methodology

Today, a software development company uses the Agile methodology to stay competitive. Majority of clients anywhere in the world demand that their software solutions be developed using the methodology. Why? Because of the many benefits that it brings to the table. Check out these benefits.

1. Business Value Concentration

One of the major benefits of Agile is an increased concentration of focus on the delivery of strategic business value through the involvement of business stakeholders in the process. With this, the development team understands what matters most and could deliver the features that provide the most value to the brand.

2. Enhanced Quality

Another of the great benefits of Agile is the improved quality of a product. By dividing projects into manageable units, the team could focus on high-quality software development, high-quality testing, and collaboration. Moreover, by creating frequent builds and doing reviews and testing on every iteration, quality is enhanced by quickly finding and fixing defects, as well as determining mismatches in the expectation early on.

3. Engagement of Stakeholders

Agile provides numerous opportunities for the engagement of the stakeholders and the team before, during, and after every sprint. Through involving various stakeholders each step of the way, there’s a higher collaboration degree between teams. The team will have more opportunities to genuinely understand the vision of a business, early delivery of working software, and boosts stakeholders’ trust often.

4. Predictable and Early Delivery

By using fixed, time-boxed Sprints of 1-4 weeks’ schedule, new features are quickly and frequently delivered, with a high predictability level. Also, this provides a chance to beta test or release software earlier than planned if there’s enough business value.

5. Enables Change

Unlike the Waterfall method, one of the key benefits of Agile is that it enables change. While the team has to remain focused on delivering an agreed-to subset of product features on every iteration, there’s a chance to refine and reprioritize the overall product backlog in a constant manner. Changed or new backlogs could be planned for the next iteration, providing a chance to introduce changes in a few weeks.

6. Transparency

Clients are involved throughout the software development project. This could include prioritizing iteration planning, features, review sessions, or frequent software builds that contain new features. This nonetheless requires the customers to understand that they’re looking at a work in progress in exchange for the added transparency benefit.

7. Predictable Schedule and Costs

Since each Sprint is a fixed duration, the cost is predictable and restricted to the amount of work that could be done by the team in a fixed-schedule time box. Together with the estimates given before every Sprint, the company could easily understand the approximate cost of every feature, which boosts decision making about prioritizing the features, and the need for more iterations.

Popular Agile Methods

Every organization differs, and so the internal and external factors that they face. Therefore, to meet the different organization requirements, let’s check out a couple of the most popular Agile methods. Which methodology works for you best would depend entirely on your internal and external factors.

Scrum

It’s a popular agile management method focusing on defining the major features and its objectives at the start of each sprint. Putting it simply, Scrum was introduced to minimize the overall risk in software development while providing faster value as well. Basically, it begins with the story or requirements, explaining how the particular features should work and should be tested.

Some of the most popular Scrum tools that help in increasing the teams’ productivity level are – Jira, Nutcache, monday.com, and ClickUp.  To manage teams & projects following Scrum methodology, you can choose monday.com. While on the other hand, Jira can also be your best choice for project management and creating customized work reports.

Benefits of Using Scrum Methodology

  • Increase in project visibility
  • Manage different priorities
  • Effective usage of money & time

Kanban

Originally, Kanban was developed by Toyota because of their need to boost factory productivity. It’s a very seamless, Agile methodology that could be defined as a prioritized, big to-do list. The requirements in Kanban, just like Scrum, are monitored by their present status as well, including in development, to-do, in a test, and delivery. 

Kanban tools offer the best services to software developers and project managers. They provide Kanban boards for the development teams. These tools are – Scrumwise, Kanbanery, Volerro, and Planview LeanKit.

Benefits of Using Kanban Methodology

  • Increases efficiency & productivity
  • Reduces work time
  • Continuous delivery approach

Lean Development

The Lean development methodology is created by Toyota and is used for the software development process. It offers conceptual frameworks and principles that enable software developers to apply the Agile development approach to their projects. This methodology’s seven essential principles are – quality development, differing commitments, fast delivery, deleting things that are not important, optimization, and respecting the team. 

Lean development offers some fantastic tools like Kaizen, Value Stream Mapping, 5S, and Focus PDCA. These tools enable the teams to improve efficiency and production levels.

Benefits of Using Lean Development Methodology

  • Strengthens knowledge
  • Optimizes value-stream
  • Eliminates delay in engineering  

Extreme Programming (XP)

Extreme programming is another very popular Agile development framework used by software development companies for various dimensions. This methodology follows the values like – simplicity, courage, respect, feedback, and communication to provide a perfect solution to the customers and satisfy them. The teams following XP methodology for their projects can choose any tool from – Project Planning & Tracking System, ExtremePlanner, and Targetprocess. Besides this, if you are a Java developer, you can select any tool from – JUnit, Maven & AntHill, and Cactus. For the .Net developers, the options are – NUnit and NAnt.

Benefits of Using XP Methodology

  • Increases product quality
  • Early product delivery
  • Empowers the team

Crystal

Crystal is a methodology that comes with different variations like Crystal Red, Crystal Orange, Crystal Yellow, and Crystal Clear. These variations specify the number of team members working on a project. It has a different range from 8 to 1000 (Clear to Red). Crystal methodology works on principles like – skills, community, talent, communication, and interactions. 

Benefits of Using Crystal Methodology

  • Flexible
  • Fewer team members required
  • Fixed-rate contract

Conclusion

Evidence reveals that the Agile methodology is very effective in modern software development these days. For most business organizations, the business and people’s results make the methodology well worth the effort.

Categories
Tips

Productivity tips busy developers need to know

Software development is a dynamic field. This has always meant that it’s essential for developers to take an active approach, and stay on top of changes. And that, in turn, means that the best developers tend to have reliable ways of keeping themselves productive.

In 2020, this trait — being able to stay productive — is arguably more important than ever. Numerous industries related to software development have taken hits, and many developers are working under different conditions than they’re used to. The ones who are best able to keep up their standard and complete their projects are the ones who are going to handle these challenges most effectively. And that leads us to our main focus: a few productivity tips busy developers need to keep in mind.

Eliminate Distractions

This is a general tip for anyone working from home, like so many developers are doing today. Basically, when you’re working from home, anything from family members and roommates, to television, to your own mobile devices can become a serious distraction, and detract from productivity. Fortunately, avoiding this issue is a simple matter of discipline. Creative Bloq posted tips on avoiding distractions that can help give you an idea of what to focus on. The best ideas they highlighted include getting comfortable physically, closing unnecessary apps, and shutting yourself into a home office all as ways to start walling yourself off from distractions.

Frankly, we see all of these as part of one bigger tip: establishing a home workspace. Particularly these days, with more people working from home, it’s important to have an area where you can be comfortable and able to focus on projects. For starters, we’d recommend an ergonomic desk and chair and a piece of lounge furniture (even a beanbag can be brilliant). Make sure temperature control and lighting are available to you. And if possible, bring in some natural light and plants. All of this will make the workspace cosy and liveable, allowing you to feel your best, focus, and stay put without feeling shut in. With a space like this, you’ll be certain to see a spike in productivity.

Schedule (Including Breaks)

In just about any situation — working from home or otherwise — a clear schedule can boost productivity in a few different ways. A Verizon Connect piece on how to work intelligently explored this idea, suggesting (rightly) that scheduling every task does two things. First, the article said, scheduling gives you a clear picture of what you have to do in a given day; second, it gives you a clear path toward a small sense of accomplishment when you complete outlined tasks. These benefits can absolutely lead to more productivity by software developers.

How you schedule will depend somewhat on your specific work and the projects you have on hand. But we recommend breaking things down (something we’ll speak on more below), and writing your schedule out in a format that allows you to cross off tasks. Even a simple Excel sheet or note-taking app (such as Evernote, OneNote, or even a simple but perfectly functional Apple Notes) can serve as a scheduling book, where you can lay out each day’s activity and cross items off as you fulfill them.

Break Down Projects

As you go about scheduling, and looking for that little sense of accomplishment you get by moving through tasks, it’s also a good idea to break down projects into parts. This might not always be doable, but in development there are often ways to segment jobs into different stages. This can first and foremost make a job seem less formidable, and make you more willing to dive in and start doing the work. But it also leads to more of that sense that you’re checking things off your list and progressing successfully through a day’s work.

These benefits are in fact what many developers get out of tools like Asana and Jira, which exist in part to help organize projects and segment tasks in an orderly fashion. While it’s easy to think of “project management” as something meant for entire teams, busy developers make excellent use out of the idea and the tools that help to make it easier.   

Automate Where You Can

“Automate stuff” was arguably the most interesting idea within Developer Circles Lagos’s developer productivity ideas posted on Medium. While that same post had some other interesting points, what showed through is the notion that people working in software development tend to have some idea of how to do a little bit of automation — say, by writing scripts that accomplish certain tasks on their own. And this sort of effort can help to simplify a job in a way that significantly improves productivity.

Automation may not help with every project, and naturally, some developers will be better able to take advantage of this idea than others. But generally, automating where you can is a sound strategy. Even using your development skills to automate a sort of record-keeping that logs your hour-to-hour activity can be extraordinarily helpful. This example would afford you a better picture of your own working habits, and enable you to adjust accordingly.

Additionally, it’s worth noting that you may not even have to do this sort of automation on your own, given the ready-made tools that exist within modern work programs. As an example, consider Slack’s “Standup Bot,” which is essentially a built-in project management assistant that can help to keep you on task.

Maintain Personal Health

Personal health doesn’t always come up with regard to on-the-job productivity, but it’s a mistake to assume it’s not a factor. As stated in our piece ‘5 Challenges for a Freelance Developer’ it’s important not to forget to “eat well, sleep and keep an eye on your health” in order to stay productive. Simply put, if your body and mind aren’t healthy, you’ll be less prepared to focus and have productive workdays. You’ll be a better and more prolific developer the healthier you are.

Written/Edited by: Amanda Fuller

Amanda Fuller is a freelance writer for over seven years. Since becoming freelance she has written extensively about work practices, both at home and in the office. She maintains that in order for a company to be successful they must pay as much attention to their employees as their profit margins. In her free time she practices yoga.

Categories
Tips

Infographic: What do you know about the gender gap in programming?

When you look around your classroom or office (mobile office at a coffee shop counts too), what do you see? Do you see mostly guy coders in t-shits and hoodies or is there a healthy mix of both male and female developers? Hopefully it’s the latter. But that often isn’t the case in many developer settings. It’s important to acknowledge that the gender gap in programming is still a challenge.

In our earlier post, we’ve identified that despite massive technological advancement, today only 1 in 10 programmers is a woman. To understand better possible reasons behind the gender gap, we turned to the data from our own Developer Economics survey. Our infographic sums up some of the findings from the the 18th edition of our Developer Economics survey, fielded between November 2019 and February 2020.  The survey reached more than 17,000 developers in 159 countries.

For a full story behind the data, head over to our blog post. Don’t forget to share the infographic and let’s start a discussion on this important topic!

gender gap in programming, female programmers, female developers, infographic, developer data, developer survey, developer economics
Categories
Tips

Common developer frustrations and how to overcome them

Derek Lee Boire, Senior Member of Technical Staff at VMware Pivotal Labs, addresses common developer frustrations, such as decision fatigue,  and the tools and methods to overcome them.

If you’re a developer, whether you realize it or not, you’ve probably experienced ‘decision fatigue’ at one point in your career. Decision fatigue occurs when the quality of the decisions we make deteriorates due to the mental fatigue of having already made a lot of decisions. While some people may want to believe that they have infinite willpower, our mental energy and focus has a limit no different than our physical bodies do. You can train long, or you can train hard – either way your body will tire eventually.

But just as we can train our bodies to endure additional stress, we can also train our minds to increase our focus. Or ideally – simplify our work to allow us to save our energy for the mental challenges that really make a difference. For example, a person with a clear idea of how they would like to manage their diet will be able to make easier decisions when grocery shopping, which can be helpful when different options are particularly abundant.  

While this example refers to a relatively simple, personal decision, it’s even more important to alleviate the burden of choice for more complex decisions which involve a greater number of stakeholders. These are the types of decisions software developers will make with each line of code written, putting them at a high-risk of experiencing decision fatigue. Here we look at some of the ways in which decision fatigue and other common developer frustrations that can manifest in software development, and the tools and methods that can be employed to combat them.

Common developer frustrations

Discoverability

If there is a task that must be performed many times, or takes a long time to do manually, or is complicated and error-prone, developers should consider using automation. Continuous integration and continuous delivery (CI/CD), the practice of automating testing and deployment of your application, is one example of this. When you automate a process, you don’t just make it easier to execute, save time, and ensure consistency – you also make it discoverable. 

This means that if a new member joins the team and has never worked with CI/CD before, reviewing the script that manages this automated process will help them to easily understand how the application is deployed. 

This can apply to source-code as well. If you’ve ever worked on a backend API that is consumed by others, you know how important it is for your API to be easily understood in order for users to easily consume it. This same level of understanding can be applied to your internal APIs that you build for yourself, for future you, and for other members of your team. 

As software engineers, we are all authors. As such, we need to consider the audience who is consuming the code that we are writing. 

Rabbit Holes

When working independently, it can be easy to find yourself lost down a “rabbit hole” – deep into trying to solve a problem and unable to remember where you had started or why you went down this route in the first place. Developers working in isolation are particularly prone to finding themselves in a rabbit hole, which is a sure-fire sign that decision fatigue is settling in. 

Collaborative development processes, like pair programming, help developers avoid rabbit holes through creating a culture of fast feedback and knowledge-sharing. When there’s only one person who understands how a specific feature was implemented, this carries a risk for the team if that person is out on vacation, happens to get sick, or is out for any number of reasons, then the team can get stuck. 

One recommended practice for pair programming is to rotate who pairs with who daily to ensure that several different team members have knowledge of how each part of the system works. This is a great way to share knowledge throughout the team as well as to ensure that the team can always continue to make forward progress, even if a team member is unavailable. 

Pair programming is built upon equality and mutual respect, a by-product of which is the establishment and/or sustenance of a culture of knowledge-sharing. Approaches to collaboration based on equal parts observation and communication are always more effective in keeping people engaged. After all, too much of one or not enough of the other can make it difficult to concentrate, which is especially detrimental when trying to absorb or share knowledge.  For example, I recently learned from a pair programming session about how test-driven deployment (TDD) could be applied to configuring docker containers using scripting purely vicariously.

Domino Code

Unsure how to implement a new feature or enhance an existing feature? If there’s a similar feature in the application, it could be a good reference so you can just follow the existing code patterns and tack on the new functionality, right? Sure, this might work for the first or second time – but by the third or fourth time you’ve repeated this pattern, it could start to get unwieldy. The easy way may be to follow the same pattern, and this can be good to maintain consistency in the codebase. However, to ensure that the software can continue to evolve, a different abstraction might be helpful. 

Developers often see an existing pattern and simply copy and paste or tack on more of the same.  While the pattern may have been easy to understand when it was initially implemented, repeated use can eventually create a ‘domino’ effect –  whereby that same pattern, at scale, may no longer serve the code after it has evolved. 

While there are some developers who are strictly against code duplication, it can sometimes actually be helpful. There’s a delicate balance between code duplication and creating a premature abstraction. Sometimes duplication is, in fact, necessary if an abstraction or cleaner way of writing can’t yet be discerned. It can be good to just let the code “simmer” for a bit longer and see how it will evolve. 

Developers should therefore be aware of the code being copied or the patterns continually being promoted in the code. The next time you find an existing code pattern and your initial instinct is to simply copy it, consider this: the next time you or someone else encounters this code, would it make sense to continue using this pattern, or is it time to consider refactoring or creating an abstraction? A good example is when a class becomes so long that it is difficult to manage (also known as ‘long class code smell’ amongst developers). The easy action is to continue to add to it and make it longer. When you detect this “smell”, consider if it would become easier to manage if it was broken down into more than one class. Are there multiple responsibilities within the same class that could be separated?

Culture of Growing and Sharing Knowledge

This is by no means an exhaustive list of all practices for building code which works for everyone. Consistency in the practices deployed (i.e. code style, formatting, automation) is another significant area where many of the major barriers can be overcome. But the first step toward implementing any of the practices described here involves a more widespread, cultural change within the organisation itself. 

Developers work best when organisational culture promotes growing and sharing knowledge within the team. This should be approached comprehensively rather than on the basis of incentives: “lunch and learn” sessions are great, but free food will only get you so far when you don’t really get to take a break from work. Instead, development teams should tie core values like communication, courage and respect to every aspect of the work they do. Doing this will help alleviate common barriers faced by developers to writing great software, while also contributing to an increase in productivity, quality of work, and developer well-being.

About

Derek Lee Boire is a Senior Member of Technical Staff at VMware Pivotal Labs. Derek’s career as an IT professional and consultant has given him experience in every aspect of software development. From working with clients to understand and detail their requirements, prototyping solutions, designing technical architectures for large-scale systems, leading development teams and helping implement agile design methodologies. 

GitHub: derekleerock

Twitter: @derekleerock

Further reading

We cover Dev Ops CI/CD usage trends here. Interested in insights? Check out our latest research reports and graphs based on data from developers like you who took our global surveys.

Categories
Tips

Scale Up Deep Learning in the Cloud

Deep learning is typically a long and costly endeavour, especially when it comes to training models. There are many factors that impact the process, but processing power, in particular, can make or break your pipeline. Today, many developers leverage graphics processing units (GPUs). Learn how you can scale up deep learning in the cloud. 

GPUs enable you to run simultaneous compute operations. This capability can significantly speed up your model training time. While on-premise GPUs aren’t an option for everyone, there is an increasing number of cloud-based GPUs options you can take advantage of.

Who Is Using Deep Learning in the Cloud?

As of Q4 2019, there are 13.3M developers working on data science, machine learning and AI development worldwide, up from 12.2M a year ago,  based on the findings from the Developer Economics Q4 2019 survey.

Click here to help us update the figure for 2020 – take part in our latest Developer Economics Q2 2020 survey live now.


Developer Economics survey - speak out and win prizes.

While many of these developers are working on more accessible, and budget friendly, machine learning (ML) projects, deep learning implementations are also gaining traction. The obvious organizations to look to for this are the cloud providers themselves and other industry giants, including Google, Facebook, and Microsoft. Others include Snapchat, Fermilab, Disney, and Carnegie Mellon University.

However, deep learning in the cloud is also proving beneficial for many smaller organizations that would otherwise not have access to the technology. As larger organizations have increased their adoption, the breadth and availability of services has increased and the cost has gone down. This has paved the way for deep learning models to be used in everything from mobile games to evaluating credit-checks.

Benefits of Deep Learning in the Cloud

Depending on the scale of your operations, implementing deep learning in the cloud can provide a number of benefits. This is particularly true for teams looking to adopt machine learning operations (MLOps) since pipelines and tooling are often already in the cloud. 

Increased scalability

One of the greatest benefits of using cloud resources for deep learning is the scalability that is possible. On-premises deployments are limited by local hardware and scaling can take significant time. In the cloud, however, you can scale as needed, temporarily provisioning hardware for particularly compute heavy tasks and scaling down during other times.

Additionally, cloud resources can provide scalability for hybrid workloads by providing burst capabilities as needed. This enables organizations to extend the value of their on-premises resources while still granting access to more performance.

Provider support for tooling

All major cloud providers offer some level of built-in support for existing ML and deep learning tools, including TensorFlow and PyTorch. This enables teams to continue working with the tools they are familiar with without limitations created by OS or infrastructure. 

Additionally, some providers offer enhancements for these frameworks. For example, pre-crafted notebooks for faster deployment. These enhancements enable teams to leverage provider tooling or resources to make implementation processes more efficient. 

Reduced barrier to entry

Machine learning in general and deep learning in particular, can require significant expertise and resources to implement. Cloud providers can help lower these barriers by offering pre-built services for developing, training, testing models. Some providers even offer ML as a service, enabling teams without ML developers to leverage the technologies available. 

Additionally, cloud resources can provide an easier entry point for deep learning operations. With cloud resources, you can test out methods and processes before making significant investments in hardware or tooling. You can also start small, and low risk, with cloud resources and scale up to on-premises investments once you better understand your hardware needs. 

GPUs in the Cloud

As cloud providers increase their support and options for deep learning implementations, organisations are beginning to take notice. While there are specialised providers available, the big three are where many organisations, especially those just getting started, should look.

Azure

Azure provides several choices for GPU-based instances. All of these instances are designed for high computation tasks, including deep learning, simulations, and visualisations.

In Azure, you can choose from three instance series:

  • NC-series—optimised for compute and network-intensive workloads. These instances can support OpenCL and CUDA-based applications and simulations. GPUs available include the NVIDIA Tesla V100, the Intel Broadwell, and the Intel HaswellGPUs.
  • NV-series—optimised for visualisations, encoding, streaming and virtual desktop infrastructures (VDI). These instances support OpenGL and DirectX. GPUs available include the AMD Radeon Instinct MI25 and NVIDIA Tesla M60 GPUs. 
  • ND-series—optimised for deep learning training scenarios and inference. GPUs available include the NVIDIA Tesla P40, Intel Skylake, and Intel Broadwell GPUs. 

AWS

AWS provides four instance options, available in multiple sizes. These include EC2 P2, P3, G3, and G4 instances. With these instances, you can choose to access NVIDIA Tesla M60, T4 Tensor, K80, or V100 GPUs and can include up to 16 GPUs per instance.

With AWS, you also have the option of using Amazon Elastic Graphics. This service enables you to connect your EC2 instances to a variety of low-cost GPUs. You can attach GPUs to any instance that is compatible for greater workload flexibility. The Elastic Graphics service also provides up to 8GB of memory and supports OpenGL 4.3.

Google Cloud

Although Google Cloud doesn’t offer dedicated instances with GPUs, it does enable you to connect GPUs to existing instances. This works with standard instances and Google Kubernetes Engine (GKE) instances. It also enables you to deploy node pools including GPUs. Support is available for NVIDIA Tesla V100, P4, T4, K80, and P100 GPUs.

Another option in Google Cloud is access to TensorFlow processing units (TPUs). These units are made of multiple GPUs. TPUs are designed to quickly perform matrix multiplication and can provide performance similar to Tensor Core enabled Tesla V100 instances. Currently, PyTorch provides partial support for TPUs.

Conclusion

There are a number of benefits to using cloud-based GPUs. Perhaps the most popular advantage is the scalability of the cloud. Instead of being limited to local hardware, you can quickly scale up or down without incurring on-prem overhead. You can also leverage cloud vendor support, and integrate with popular frameworks such as PyTorch and TensorFlow. 

Another popular benefit of cloud is that many vendors offer resources that can significantly save time. For example, you can use cloud AutoML tools to speed up some of your processes, and test out methods without investing too much time and costs. In this case, you also reduce risk by testing out your hypothesis. In short, cloud GPUs enable you to gain a higher level of scalability, save time, and avoid on-prem overhead.

Author Bio: Farhan Munir

With over 12 years of experience in the technical domain, I have witnessed the evolution of many web technologies, as well as the rise of the digital economy. I consider myself a life-long learner, and I love experimenting with new technologies. I embrace challenges with enthusiasm and outside-of-the-box mindset. I feel it is important to share your experiences with the rest of the world – in order to pass on the knowledge or let other folks learn from your mistakes or successes. In my spare time, I like to travel and photograph the world. YouTube

Are you using cloud GPUs in your development? Take our survey and share your experiences.

Categories
Tips

AR/VR Trends in the Ecosystem – Part Two

We continue to look into some of the AR/VR trends in the ecosystem, focusing on the main differences between developers and non-developers active in this space. You can view our first part of this article here.

22% of AR/VR non-developers are learning to code

15% of people involved in AR & VR as non-developers have zero knowledge of how to code, whereas 17% are actively coding to get things done. There is a large range of skills, but the biggest group here are those that are actively trying to build on their coding skills, with 22% of AR/ VR non-developers doing so. This indicates that no-code tools, whilst useful for getting things done, don’t cover the needs of more than 1 in 5 AR & VR practitioners who are subsequently learning to code to overcome these limitations. Despite the large amount of effort – and marketing – that has gone into positioning no-code tools as a solution for non-coders to get into AR & VR without worrying about writing code, a sizeable proportion of those who do get involved subsequently decide they need coding skills to realise their vision after all. This represents an opportunity for platforms aspiring to appeal to non-coders to create more functionality in these tools in order to capitalise on this under-served audience.

Amongst non-developers trying to improve their coding skills the most popular languages are Java (28%), C++ (26%), C# (25%) and JavaScript (22%). 17% don’t write code for their AR/VR projects, and 15% use a visual development tool. This indicates that non-developer AR & VR practitioners see the value in knowing how to code, but that they still want to create things while they’re learning.


AR/VR trends. Non-developers are actively learning Java, C++ and C#

Games is the most popular app category for developers and non-developers alike

AR & VR practitioners are primarily focused on creating entertainment and services products, but the primary focus is different for developers and non-developers. 77% of AR/VR developers are building products in the services category (such as business logistics products) whereas only 67% of non-developers are doing so. 

The most popular category for AR and VR practitioners is games & toys, with 52% of developers and 44% of non-developers working on products in this category. The picture is somewhat different for other entertainment products (such as moves and animation), with 65% of non-developers working on apps in this category and only 47% of developers operating here. This indicates that developers are using their coding experience to experiment and create games in AR and VR, whilst non-developers are inspired by other use cases.

Industrial applications (such as manufacturing and construction) for AR/VR are much less popular for both groups, but a larger proportion of developers are creating products in this category than non-developers. As AR and VR mature and stabilise, commercial applications will become more viable and we will see further innovations in industrial areas from developers and non-developers alike, but the pull of building entertainment apps will still be strong.


AR/VR trends. AR & VR practitioners mainly create entertainment & services products

Which AR/VR skills will you need to sharpen in 2021? Which tools do you think will be irrelevant as early next year? Our State of AR/VR survey is live. Spend 10 minutes sharing your experiences, we’ll donate $0.10 to Techfugees to for every completed response.

Categories
Tips

The Definitive Guide to Clean Code

Clean code is vital in every aspect of software development as well as mobile app development. A code that’s clean means it’s easy to understand and to change. Writing clean code is paramount in creating a successful and maintainable product. What is clean is, of course, subject to every developer’s take. Here is the definitive guide to clean code.

There are many considerations when it comes to what constitutes a clean code as well as the best coding practices. Nonetheless, there’s no particular distinction. Again, it is subjective to what a developer considers clean, based on the product being built.

Why Clean Code?

Clean code is important to care since code almost is never written only once and forgotten. Most of the time, you and others have to work on the code. Understanding of the code leads to work efficiency. The code is not only intended for computers but humans as well. Writing clean code means minimizing maintenance expenses. 

Furthermore, it means making it much easier when fixing bugs as well as working on code for many years a lot more enjoyable. In essence, clean code means making life easier for those involved in the project. However, it doesn’t mean being obsessed with clean code. It has to provide value, thus do not spend countless to make it perfect. 

Anyway, clean code doesn’t occur on the first try. The key is adopting a mindset that always strives to enhance the code that you work on. Clean code is paramount since it makes or breaks a project. 

Guide to Clean Code Characteristics

1. It should be elegant. It has to be pleasing to read, making a reader smile in such a way that a well-crafted music box would or even a well-designed car. 

2. It is focused. Every module, class, and function exposes a one-minded attitude that’s free from distraction and pollution by surrounding details.

3. It’s taken care of. Someone took the time to keep it orderly and simple. Moreover, they have paid close attention to details, meaning that they cared. 

4. It doesn’t have duplication.

5. Runs all tests.

6. Minimize entities like methods, classes, functions, and others. 

Writing Clean Code

Clean code follows and embraces specific practices. The practices are what make code readable, more comprehensible, cleaner, and simple. Implementing some of the following could bring positive results. 

  • Make readable code. Never neglect its comprehensibility and readability.
  • Utilize meaningful names for variables, methods, and functions 
  • Review the code regularly.
  • Allow one method or function to perform just one task. 
  • Use comments for clarification.
  • Be consistent.

1. Make readable code. It’s always a possibility that another would get your code or else if you’re working in the same software development company then you can re-use the code. It is of the best interest of all to write code in such a way that makes it easy to read as well as understand. Using whitespace is the easiest way. It isn’t a must to write code that looks minified. Rather, use line breaks, empty lines, and indentation to make the code structure more readable.

2. Utilize meaningful names for variables, methods, and functions. Meaningful means names that are descriptive enough that others would be able to comprehend the purpose of the function, method, or variable. In simple terms, the name itself should suggest the method, function, or variable is used or what it carries. Nevertheless, descriptive names do not mean you’re free to use as many characters as you wish. Rule of thumb would be limiting names to three or four words.

3. Review the code regularly. Simply writing code is not enough. The next step would be to maintain its cleanliness. Review it regularly, clean it, and try improving it. Otherwise, it would become outdated. The same as with the device, to keep them in the best shape requires regular updates.

4. Allow one method or function to perform just one task. Let every method or function do just one task. This may be simple but could change everything and help you write clean code, or at least something cleaner than before. Moreover, functionalities and methods also become predictable.

5. Use comments for clarification. Regardless of how you struggle to come up with meaningful methods, variables, or functions, on its own, the code still would not be clean and understandable as it should be. There would be lines that require elaboration. Using comments via the code helps to fix this. Comments explain to other people why you are writing them and the reason why it’s written in that manner. This way, people would not have to make a guess. Comments should be used only when necessary and not for explaining bad code. Writing endless comments won’t help transform a code that’s poorly written into clean code. A bad code should be fixed by improving it, not adding instructions on how to use it. 

6. Be consistent. Stick to specific coding styles or practices and use it everywhere. It’s not a good idea to use different styles or practices in another project. It’s not as smooth and natural as it could be getting back to old code. Select coding practices set and stick to them in all projects. It would be much easier to return to an older code and proceed where you left off or to improve code. It’s a good idea to experiment on new coding practices. Furthermore, it could help look for better ways to do work. Nonetheless, it would be preferable to experiment with different practices on a separate project or exercise instead of on the main project.

Why Strive for Clean Code

Clean code is easy to understand and readable by everyone. Writing clean code is a critical mindset and it takes practice. Nobody is perfect, including you. There is always an opportunity to refactor or improve code when you review it after a few days or a few weeks. Therefore, begin writing a clean code as you can from the first line to work more on improving performance and logic. 

Pros

1. Better use of time. The first recipient of clean code is, of course, the programmer. Working on a project for months sometimes makes it easy to forget what you’ve done with the code. This is particularly true when a client comes back with changes. Making changes is easier with clean code lines. 

2. Easy debugging. Bugs are inevitable whether you write clean or dirty code. Clean code, however, makes for faster debugging, whatever your expertise or experience may be. Managers or colleagues could help and jump in to help you. 

3. Easier for new members of the team to get on board. Principles of clean code help to get onboard a new programmer. It helps to get a new programmer on board with clean code. No documentation is required to understand the code and a newbie could jump directly into it. This saves time on training and for a new member to adjust to the project. 

4. Much efficient maintenance. Maintenance doesn’t mean fixing bugs. Any project would need changes, new features to existing ones. In any software project, maintenance is the major cost. New features or additional ones always are an afterthought. Clean code makes fast and easy maintenance. 

5. Feel good. Clean code makes you feel good and confident to share it with others or with a client. You need not fear of breakdown and you would also be able to fix defects faster and this means you get to enjoy programming more. 

6. Easier to solve problems. The approach to problem-solving changes when writing clean code. Furthermore, software design and algorithm design become more intentional and elegant.

7. Communicated ideas. A clean code minimizes the change of misunderstandings when working with other developers and programmers. Furthermore, this also means lesser bugs to deal with in the future. 

Going Further with Clean Code

Majority of the basics in making clean code are common sense. Nonetheless, even with the most basic software, success requires paying attention and focusing on details. Products increasingly have more at stake than pride and money. In today’s age where we have autonomous vehicles on the road, the rules on code structuring and writing have gained relevance. Furthermore, more diligence should be applied to security-critical and safety systems. 

Industries like defense, automotive, aerospace, banking and finance, and medical device manufacture have stringent coding compliance standards. The code should meet industry standards. Source code could be scanned using static code analysis tools. Furthermore, the tools could also detect vulnerabilities in security, hidden defects, and ensure adherence to the best coding standards. 

Undoubtedly,  custom software development companies create products for their clients. Clients could do whatever they want with the software or product. They could use it internally or even sell it to somebody else. Most importantly however is that they could modify or extend it themselves. 

To be able to do this, they need a clean code. Thus, when building software, it is of utmost importance to deliver clean code at all times. Again, clean code truly matters. A clean and readable code enables continuity of the product. Furthermore, it makes it possible for another person to continue the work and enjoy doing so. The result is a lesser bug and easier to maintain software. 

Did you enjoy this guide to clean code? Is there anything else that a developer should consider?

About

Working as a manager in a software development company Tatvasoft.com. Vikash always has a passion to explore more about software  development and likes to share his bylines among relevant audiences. He is a full time blogger and you will find his informative bylines around many corners of blogs related to development. You can always find him on Twitter


What will be the biggest dev trends in 2021? Help us find out! Take the new Developer Economics survey, answer a few questions about dev tools, platforms, technologies for a chance to win cool prizes!

Check out our latest research reports and graphs, based on data from developers who took our global surveys.