Lifelong learning and professional development in software engineering

James Davis
6 min readMay 10, 2024

--

Introduction

I am on the faculty of Electrical & Computer Engineering at Purdue University, where I research and teach coursework in software engineering. I was formerly a software engineer (QA) at IBM.

Sometimes students ask me the following question: “How do I stay up-to-date in software engineering?

Here are my thoughts on the topic.

Why should you embrace lifelong learning?

Because it’s the right thing to do

In case you’re not aware, the two primary professional societies for the computing profession are the ACM and the IEEE . They got together a few years ago to issue a joint statement on a “Code of Ethics” for software engineering.

That code is available here: https://www.computer.org/education/code-of-ethics. The TL;DR version of the Code is 8 principles, of which the final is “Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.

Now, why is lifelong learning part of this code of ethics? I did not help write it, but I think it’s in there because we are simply not very good at building software right now. Every year there are new advances that can help us build software better. If we choose not to study and take advantage of them, then we are implicitly choosing to ship worse software than we could be.

…and follow the money

Among the engineering professions, computing is set apart by the rapid pace of change. Things do change more quickly in some areas (e.g. front-end web development) than others (e.g. firmware development). But all areas are affected by some changes from time to time. For example, you can use generative AI (“Dear ChatGPT…”) to help you build better systems regardless of your sub-area. But only if you are aware of the strengths and limitations of that kind of technology, best practices in prompt engineering, etc.

If you keep up with the field, it can help you differentiate yourself in the marketplace. It may put you in a better position to offer value-for-money than your competitors.

How should you embrace lifelong learning?

All right, I hope you are motivated — perhaps by a desire to not harm people with your products, or at least by a desire to make money and stay employed. Maybe both. So let’s talk about how you might stay up-to-date.

Control your calendar

If your job is anything like mine, you probably have far more things to do than you can get done in a lifetime — and the backlog keeps growing. Let’s face it, if you defer learning until you clear your backlog or reach inbox zero, then it’s never going to happen. Instead, you need to take control of your calendar to make time for that professional development. If it helps, you can view this time as an investment, upskilling to help you clear the backlog faster.

Here’s what I did: I set aside 30–60 minutes each morning for professional development. I would get a cup of coffee, crack open a book or blog post or magazine or video, and start learning.

Two points here:

  1. This is work time. You don’t need to spend your personal time on it, on nights and weekends. If you are an engineer, you have an ethical obligation to society and to your customers to continue to learn. That shouldn’t come at the cost of your personal life. It is part of your professional duties, and you should have no compunction about billing your employer for it.
  2. This time will not make itself. I marked out that block on my calendar as busy, and would not schedule meetings in it.

Did I do this every day? No, of course not — deadlines come up, all hands need to be on deck sometimes, and sometimes I just didn’t feel like doing it. But I advise you to default to learning (with that calendar block) so that you have to take action to not do so. Default to learning!

Construct your curriculum

OK, now you have a time block set aside for development. What to do?

You might just keep a list of interesting resources and pick one to study each day. This is akin to browsing the titles at a library or the headlings in a newspaper. This will be much better than nothing.

But you will probably find it more helpful if you regularly identify topics you want to be better at — “I want to know about fuzzing”, “I want to know how generative AI might apply to my product”, “I want to know about architectural patterns for fault-tolerance”, “I want to know whether our team’s techniques for X are up-to-date” — and then build short curriculums around it.

For example, on the first Monday of every month you could pick a topic, on the Tuesday you could identify resources, and then you could spend the rest of the month examining those resources.

Choose your sources

Here are some resources I look at. I divide these into three kinds: practitioner-oriented, research-oriented, and student-oriented. You can learn a lot from each kind, depending on what you’re looking for.

Practitioner-oriented. Since I teach software engineering courses, I tend to read a fair amount of this material to keep my courses relevant.

  • Magazines: I am a member of the ACM and the IEEE. Membership (possibly with some modest extra fee) includes access to magazines like the Communications of the ACM (CACM, IEEE Edge, and IEEE Software. I like to get a physical copy in the mail. I’ll leaf through it looking at “cool stuff” and things I don’t know about. These often include review articles that talk about a few recent research papers on a topic.
  • Books: I’m a big fan of the O’Reilly book series. They’ve published books like “Site Reliability Engineering” and “Software engineering at google” and “Making embedded systems”, all of which I really enjoyed. These are informal in the sense that they are not full of equations — easy reads that make you think. I browse their titles every so often and pick up copies of the interesting stuff on eBay.
  • Newsletters: It seems like every year there’s some company or another that decides to start a newsletter with a comics-based approach to technical topics. You can find lists of these! (https://www.codecademy.com/resources/blog/newsletters-for-tech-coding-news/) At the moment I’m following the weekly newsletters from Level Up Coding — https://blog.levelupcoding.com.

Research-oriented: I’m also a researcher, so I have to keep up in the field in order to continue to publish in it. Here is where you might look — a lot of this material is pretty approachable if you have a bachelor’s in computing.

  • Research papers: There are new research papers every year in computing. These are generally organized by discipline, e.g. “machine learning”, “cybersecurity”, “software engineering”, “reliability”, etc. Research papers in computing are usually available for free if you search the titles on google scholar — there are copies indexed by Google on arXiv or on authors’ personal websites. As a backup option, you can email the first and last author on the paper (authors will reply very quickly to these requests — I know I do!). Reading papers can take a long time, but you need not read the whole thing to get value. Usually the Introduction and the figures will teach you something if you spend 10 minutes on them. If you want to get a sense of the most prestigious venues in a particular discipline, you can use this website: https://csrankings.org. On the left-hand side there’s a list of disciplines. If you expand each one you will see the names of the top venues. They all have websites.
  • Writeups of research papers: This resources is on a probably-permanent hiatus, but there are 1000+ articles in it so there’s no shortage of material. The author read, wrote up, and illustrated one research paper each day https://blog.acolyer.org/about/. I don’t know how he did it but it was awesome while it lasted 😊.

Student-oriented: There are tons of online courses available on myriad topics. Some are hosted by universities and educational non-profits. Others are hosted by companies such as Google’s developer certifications. A mix of free and paid, but these are great ways to get started and very do-able if you use 30–60 minutes/day on them.

Will you embrace lifelong learning?

I hope you will. If you have questions, tips, or suggestions, please chime in in the comments.

--

--

James Davis
James Davis

Written by James Davis

I am a professor in ECE@Purdue. My research assistants and I blog here about research findings and engineering tips.

No responses yet