ProgrammingPro #37: Rise of C#, Google's AI Duo, and Author Tom Bailey's Flutter Journey
Bite-sized actionable content, practical tutorials, and resources for programmers
"programming has changed a lot in the last 30 years. It used to be very logical, but now there's a lot of creative aspects to it because you're talking to clients and you're understanding what they need and trying to create a solution for that rather than just being told, "Program this.”"
– Tom Bailey, In an interview published in today’s Expert Insight
Welcome to this week’s issue of ProgrammingPro! Before I get into today’s issue, I just want to let you know that we are taking a two week break for the holidays🎄🌟. We will be back with our first issue for 2024 on the 🔔 4th of January🌠.
Now back to the issue. Today’s Expert insight feature includes an interview with Tom Bailey, who wrote the book, Flutter for Beginners - Third Edition. Bailey is the cofounder and CTO of Life Ninja, an education technology company based in the UK, and the IT Director at Optimum Medical. He kindly agreed to share with us his inspiring journey through the world of programming from tester to tech leader and the wisdom he picked up along the way. A must read for anyone working in client centric environments.
News Highlights: C#'s is set to rise as the potential Tiobe Language of the Year, fueled by Java developers seeking more expressive and license-free alternatives. Google's cutting-edge offerings for developers including the temporarily free Duet AI and the groundbreaking Gemini Pro are set to enhance coding within IDEs and set new standards in AI development and tooling.
And, Here are my top 5 picks from today’s learning resources:
Thank you dear readers for journeying with me till the end of 2023.
May your holiday season be as joyful and rewarding as perfectly optimized code🎄.
Don’t forget to stay awesome! 🌟
Divya Anne Selvaraj
Editor-in-Chief
PS: If you are looking for Python resources, go to the latest issue of PythonPro.
🗞️News, 💡Opinions, and 🔎Analysis
🗞️News
C# expected to be Tiobe language of the year: The language’s significant growth in popularity which is outpacing rivals like Fortran and F# can be attributed to Java developers migrating to C# for its expressiveness and lack of license issues. Read for insights into the shifting trends in programming language popularity.
Google’s Duet AI for Developers is now generally available and free until February 1, 2024: This developer-focused tool supports over 20 languages and integrates with various IDEs to maintain your flow state without leaving the IDE. Read to learn about features including code assistance, completion, and Smart Actions like unit test generation.
Google pitches AI developers with Gemini Pro, new tooling, and generous free quota: Pro offers generous free access to AI Studio, a development tool, and upgrades Imagen to Imagen 2 for text-to-image conversions. Gemini Pro outperforms OpenAI's GPT-4. Read for insights into Google's advanced AI tools.
JDK 22 - The new features in Java 22: Releasing in March 2024, version 22 introduces 12 features including previews of scoped values and stream gatherers. Read to learn about key highlights including structured concurrency, class-file API, and enhancements for multi-file program execution which improve usability.
Tesla to remote patch 2M vehicles after damning Autopilot safety probe: The recall follows a two-year investigation sparked by Autopilot-related accidents. Read to learn how the recall aims to address Autopilot's misuse risks, and includes software updates to enhance driver engagement and safety.
💡Opinions and Analysis🔎
9 reasons SQL has got to go: This article highlights SQL’s paradoxical nature in how it is still widespread in its use despite being clunky, and despite the availability of newer technologies. Read to learn why scalability issues with tables, lack of native support for JSON/XML, and more make the author wish they could quit SQL.
Generative AI is off to a rough start: With AWS' Amazon Q experiencing data issues, Google's Gemini demo being fake, and Meta's AI safety tools lacking prompt injection attack prevention, the industry's overhype and under-delivery of genAI, suggests a need for open source to foster transparency and accountability. Read for insights into the current state of genAI.
Stop nesting ternaries in JavaScript: The author argues against nesting ternaries in JavaScript for clarity and readability and suggests alternatives like using conditional statements or refactoring into functions. Read to learn how these approaches enhance code maintainability and align with Clean Code principles.
What's Zig got that C, Rust and Go don't have? (with Loris Cro): This episode of the podcast, "Developer Voices", features Zig, a new programming language aiming to replace C and compete with Go and Rust in systems programming. Watch for insights into the evolution of system-level programming languages, the challenges and complexities of replacing C, and the features of Zig.
Don’t write web apps in anything other than Typescript: The author advocates using Typescript for both front and back-end development in web apps, emphasizing its benefits in streamlining development processes and reducing cognitive load. Read to learn how Typescript simplifies and unifies the stack.
🎓 Tutorials and Guides🤓
Advent of Code in C++ Template Metaprogramming: This article details an experiment using compile-time C++ metaprogramming through the creation of a compile-time list, input processing, and the implementation of folds, a functional programming concept. Read to learn advanced C++ template metaprogramming techniques in the context of solving complex computational problems.
Mixing C++ and Rust for Fun and Profit: Part 1: This article delves into technical aspects like function identifiers, name mangling, data layout, and standard libraries, using D as a potential solution for language interoperability. Read to learn about interoperability issues and potential solutions for seamless language integration.
Building a Web Game in C: Looking for a Christmas break project? This guide will take you through the process of creating your very own web-based game using C and WebAssembly. Read to gain insights into game programming, environment setup, and cross-platform development and to access a specific practical guide.
Building a bare-metal bootable game for Raspberry Pi in C#: This article details the creation of a graphical bootable game using .NET 7's native AOT feature, which allows C# code compilation into native code without a virtual machine. Read to learn about advanced techniques, including handling low-level system operations, and developing bootable applications for modern computer firmware like UEFI.
JAVA Virtual Threads Tutorial: This detailed tutorial takes you through enhancing concurrency and throughput in Java applications by efficiently utilizing operating system threads. Read to learn how virtual threads work in Java, their benefits in concurrent programming, and how they differ from conventional threads.
Server-side Rendering with Next.js, React, and TypeScript: This article contrasts server-side rendering (SSR) with client-side rendering. Read to learn about the benefits of SSR, like faster page loads and improved SEO, and access a step-by-step guide to implementing SSR, including code setup and data fetching.
Intro to JSX - HTML that does JavaScript: JSX, a templating language within React, merges HTML and JavaScript, allowing the structure of application views to interact with JavaScript context, challenging traditional views of separating structure from behavior. Read for a comprehensive understanding for styling dynamic UIs.
🔑 Secret Knowledge: Learning Resources🔬
12 Software Architecture Pitfalls and How to Avoid Them: This article talks about the importance of understanding quality attribute requirements (QARs), not relying solely on vendor decisions, avoiding copying architectures from other organizations, and the necessity of iterative testing and feedback. Read to learn how to implement strategies for resilient, adaptable, and successful architectures.
In C++, how can I make a member function default parameter depend on this?: While direct implementation is disallowed, you can emulate the dependency using function overloads. Read to learn how to circumvent limitations with default parameters by employing function overloads, and understand the challenges involved in creating pointers to such overloaded functions.
Text Editor Data Structures: Rethinking Undo: This article discusses reimagining the "undo" and "redo" functions in text editors, exploring different approaches and their merits. Read to discover new approaches to enhance functionality and learn to implement these features using modern data structures and algorithms.
Back to Basics: Functions in C++ - Mike Shah - CppCon 2023: This talk offers an extensive overview of C++ functions, from basic examples to advanced concepts like lambda functions and function composition. Watch to explore functions in various contexts, including assembly language, pointers, std::function, local scope, and class member functions and gain assembly-level insights.
SQL unleashed: 7 SQL mistakes to avoid: This article details common SQL mistakes including reusing queries without modification, and performing negative searches along with alternative approaches to optimize SQL query performance and efficiency. Read to learn practical strategies to enhance your SQL query writing.
From C to Java Code using Panama: This article provides examples of using Panama, introduced in JDK 21 as a preview feature, for basic file operations in C, demonstrating the ease of directly calling native C functions in Java without cumbersome JNI code. Read for insights into error handling and the use of JExtract for automatic MethodHandle generation.
Finding unreachable functions with deadcode: This article introduces deadcode, a Go programming tool designed to identify and eliminate unreachable functions, streamlining code maintenance through Rapid Type Analysis (RTA). Read to gain insights into optimizing Go code.
🧠 Expert Insight 📚
Here’s an exclusive interview with Thomas Bailey, who co-authored the book Flutter for Beginners - Third Edition
with Alessandro Biessek.
The book is a resource designed to guide you through creating and releasing your first Flutter app.
In the following interview, the author, Tom Bailey, talks about why he chose Flutter for his company, and shares his decades worth of programming wisdom, including testing best practices, the necessity for creativity and client focus, and why he recommends lean development.
Q: Can you provide a brief overview of your professional career path, leading up to your role as Founder and CTO at Life Ninja and IT Director at Optimum Medical?
A: Yes. Well, I started enjoying programming when I was 11, but when I went to university, I chose to do math and economics and was terrible at it. I was almost failing that degree, but I went to a career fair, and IBM was there. This was during the .com boom between 2000 and 2001, and IBM took on 80 people that year, even people that were struggling with their degrees. I was really lucky because then the following year they only took on eight people and only chose those who were doing well in their degrees. So, I went into a testing role, testing the first versions of software linked to automated phone systems. I stayed at IBM for nearly ten years and decided I wanted to be a programmer, but there were no programmer roles there.
So I left, and moved to Ocado, which is an online supermarket. I joined there as a programmer, programming in the Java programming language and stayed there for about 8 years. In the last few years in my time there, I was a technical account manager, which involved travelling to the United States, Australia, and France as a technical salesperson, which doesn't come naturally to me, but I stuck with it.
And then I was lucky enough to be able to try to start my own business, which was Life Ninja. For this, I moved up to the north of England because I couldn't afford to pay mortgages in the South of England while running my own business and building education apps. And that's where and when I started using Flutter. We started with Flutter when it was still in beta. So, it was a bit of a gamble to base all our software on a framework that was literally just being built right in front of us. But it turned out to be a good gamble because that software is cutting edge now.
We spent two years building the Life Ninja platform but then three months before we were about to go live, COVID hit, and all the schools shut down. Schools needed software and so they just purchased whatever software was currently available, and ours wasn't live yet. So, to tide ourselves over I took a job at Optimum Medical, so I kind of do both roles now.
Q: That's quite a lot of experience. But just picking up on the fact that you chose to use Flutter to build apps for Life Ninja even when it was in beta, can you talk a little bit more about that?
A: When we kicked off Life Ninja, we were a team of four: a designer, a developer, a school expert (a teacher familiar with the educational domain), and a salesperson. So, there were four of us, and at that point, I was the only programmer.
I couldn't afford the time to master three different languages or code for three platforms, Android, iOS, and websites, for the same app. Let's say we had an app named Space Explorers, where kids tackle math problems while fighting off aliens. Trying to write code for Android, iOS, and the web separately would have taken me three years.
That's where Flutter came in. It allowed me to write code once and run it seamlessly on all those platforms. Sure, there were other frameworks making similar promises, like Cordova and React Native.
Now, I'd used Cordova before, and it was a nightmare. A clunky language that crawled on Android – not an ideal situation. Let me share a quick sidetrack: about a decade ago, when we created our first app as a hobby, we used Cordova. Spent a year developing and testing it on iPhones and laptops, thinking everything was fine. Then, just a week before release, we tried it on an Android phone and it was just horrifically slow. It took minutes to even load the screen, so we got burnt by that.
So that's why we chose Flutter mainly for time, because you only have to write one piece of code and learn one language, and it runs really fast on all the platforms.
Q: Yes, and this is why Flutter is gaining in popularity so much. So, shifting gears a bit, how did your work at IBM and Ocado shape your perspective on technology and its application. How did all that experience contribute to how you chose to do things at Life Ninja?
A: So, my career began as a tester, and I encountered a lot of bad code. Generally, bad code arises when people try to be too clever, or too lazy—it's a spectrum. On one end, people attempt to be overly clever, writing code that they believe will solve world problems, but they’re just trying to create an app. On the other end, people opt for the quickest code they can. While testing, I observed that lazy code fails predictably, while clever code fails in complicated ways.
So, when I started Life Ninja, my approach was to try and take the well-trodden path as far as possible. That way you have a lot of support from other people who have been there and done that.
Q: Yes, that is wise strategy, and it makes good business sense. What other kind of best practices did you discover in your journey in those roles for programming?
A: So, I’ll go back to my testing phase again when we were testing automated phone systems. The problem with testing those was that it took ages, so you didn't have a quick feedback loop. Any test would take several hours to run, and then you'd have a result.
It’s really important to have a quick feedback loop whether you are testing or talking to users because then you can react, and the code is fresh in your mind.
So, one of the really good things about Flutter is it has something called hot reload. You type or you change a bit of code, you press enter, and it instantly changes the app on your screen, so you can see if it works straight away, which is incredibly beneficial because you can then learn quickly from things. It's kind of like, when we didn’t have digital cameras you would take loads of photos, and then you wouldn't know for a week if those photos were good, till the film was developed. You couldn't learn quickly if you were taking good photos. With digital cameras you get that feedback instantly, so you can become an expert in photography much faster. It's the same with programming.
Q: Thank you for that insight. Now as the CTO of Life Ninja, how do you think your role has evolved to adapt to the unique challenges and opportunities presented by the education technology landscape especially in light of the COVID-19 pandemic?
A: So, one of our focuses in Life Ninja was, obviously, looking at what was already out. And one thing that struck us was, there wasn't good reporting. What I mean by that is a child might go and use one app for math revision, another for English learning, and yet another to check their homework or trips. These things, they didn't talk to each other.
Now, that's all well and good when you're seeing the child face-to-face every day. However, when that child is at home for several days due to an outbreak at school, the teacher needs to have this holistic view of the child's learning. If they're doing English revision on one app, the teacher needs to see how successfully they're doing so they can intervene if there's a problem. If the child is playing math games but struggling with one part of the curriculum, the teacher needs to know. So that was a real focus for us, especially with COVID; to make these apps linked up.
We had this holistic view for the teacher because, it's all well and good throwing technology at a school, but teachers don't have a lot of time. They're time-poor, and also, they're not necessarily technical experts. For example, they should be able to say, "I've set all the children this homework. Let me have a look across it. All the children are struggling in this area. That's where I should tailor my teaching next." Quick, easy intervention.
We looked at competitors, and they had very technical systems. They expected teachers to be technical, and teachers, just want to get on with their day job and have tech as a supplement to that rather than something that takes up their time.
Q: That makes complete sense. You talked about the fact that you did a degree in economics and mathematics and that you struggled in that, but then you entered a programming career. And I've always heard people say that math is important for programming. Do you believe that to be true?
A: I think you may have heard the saying, "correlation is not causation." People who are mathematical have logical brains, and programmers have logical brains. So, the fact that someone who's good at math is also good at programming may be rooted in the fact that their brain is geared to be logical rather than perhaps more creative. And so, it looks like mathematicians become programmers and vice versa. But it's not always the case.
Having said that, when you're doing games, not so much for business applications, but for games, you have to do a lot of math. For example, if it's like a football game, you've got to look at the physics behind how the ball moves, and that's a lot of mathematics in that. Also, if you're shooting a bullet, you need to look at the trajectory of that bullet. So, there are certain parts of programming that do require mathematics, and it's mainly within the games industry.
But I don't think it’s necessary to be good at math to be good at programming, and actually programming has changed a lot in the last 30years. It used to be very logical, but now there's a lot of creative aspects to it because you're talking to clients and you're understanding what they need and trying to create a solution for that rather than just being told, "Program this, this, and this.”
Q: How important is it for a programmer to be creative when they're developing solutions for clients? Can you, share some kind of example where you had to listen to a client and come up with a really creative technical solution or software for them?
A: So, we've developed an app called Zap Maths, in partnership with another company named Multiply Music. Their unique business model involves teaching children to drum, and while they're drumming, they simultaneously learn math. It may sound unusual, but the concept is to ask the child, for example, "what's 3 * 8?" and have them bang the drum that many times.
Not only does this involve mental math, but it also incorporates the technique of drumming, which is a fascinating idea. They approached us to create an app for them, and our task was to replicate this drumming technique in a game. The approach involves popping up a question, answering it, and then engaging in gameplay similar to the arcade game Dance Dance Revolution (DDR).
In this rhythm-based learning, you answer a quick question or play a short game, drumming along to the beat, and then another question follows. This approach ensures continuous engagement, maintaining a focused state for the brain. There's no downtime, and it provides instant, quick answers, serving as an effective method to embed knowledge. To achieve this, we had extensive discussions with Multiply Music to understand their technique, making this project a creative endeavor as we aimed to replicate a physical world activity in a unique game format that hadn't been explored before.
Q: Brilliant. So, coming back to your ideas of programming, you are someone who is very much in favor of Lean Development and Agile strategies. Can you talk about an app that you developed at Life Ninja that used these strategies during development?
A: Yeah. So, actually, I mean, we're never perfect. We have these principles that we live by, but that doesn't mean we always follow them. An example where we failed on that is the parents' evening booking system. Instead of keeping it simple for parents to book to see a teacher, we tried to gild the lily. We attempted to create an all-singing, all-dancing booking system, which became too complicated. Teachers couldn't use it as a parent-teacher booking system because it was too hard due to the excessive features we added.
So, instead of just making it simple and saying, "Teachers, here are your slots, and parents, you can book onto those slots," we made it so a teacher could say, "I've got these slots, but I want to prioritize them in this way, and I want to have this kind of process that allows people to book but not book next to each other, and blah, blah, blah." It was just too complicated and too hard to use. A really clever system, but people didn't use it because it wasn't what they needed.
Lean tells you to build what people need and then extend it in the future if you want to. We didn't follow that. We built this all-singing, all-dancing Google Calendar type thing, which is not what they needed at all. So yeah, we wasted a lot of time and made the app worse as a system.
Q: That's a really good example. Shifting gears a bit again, let's talk about the future of tech. With AI becoming such an overarching trend, what kind of future do you see emerging especially in the education or medicine?
A: Yeah, I think there's two. There's the good and the bad when it comes to AI. The bad part, in my view, is caused by LLMs like ChatGPT.
What they do is take all the text and figure out the next most likely thing to say based on that. But the problem is, in medical or educational settings, it's just making things up. It's like, "I've said this, so the next most likely thing is this." Sure, it might make grammatical sense, but it doesn't always make factual sense. To tackle this, we need guardrails, which are factual databases that the LLM checks against to see if what it's saying actually makes sense.
The issue here is that, after putting all this effort into making these guardrails, you might as well just talk directly to the factual database for an immediate answer. So, in my opinion, going down the path with LLMs like chat GPT isn't the way to go. The factual database is more valuable and will likely be the most useful in the next few years. Essentially, I see the current LLM reliant approach as a dead end.
Now, on the positive side, machine learning, especially in areas like cancer diagnosis, is showing great promise. For example, analyzing mammograms and recognizing signs is quite impactful. The evolution of machine learning in image interpretation, where you can identify objects in photos, is impressive. This capability allows efficient classification of photos, aiding in searches. This quickens the process of cancer diagnosis. However, the human touch remains crucial, with individuals using these suggestions as assistance and then performing double checks.
I anticipate significant advancements and benefits in AI serving as an assistant in complex areas like these.
Q: In either of your jobs right now, are you using AI? What are your thoughts on AI coding as assistants?
A: It's an exciting area, especially regarding programming assistance. So, in Optimum Medical, they have been quite useful. We now have two new apprentices or junior developers. And tools like GitHub copilot prove valuable when exploring a new language for the first time by providing suggestions to expedite coding. Unlike in the past, where I recall my early days with Basic, 30 years ago, you had to refer to a book to understand code, you can now receive instant feedback, reinforcing what I believe about quick feedback loops.
The copilot informs you whether the code won't work in a particular way or if it will aid your coding. I personally refrain from using them because, with language experience, you know what you're doing. It's akin to writing a book. For an experienced novelist, a computer suggesting the next plot point or dictating character dialogue might impede the thought process due to being in the flow.
However, for someone writing their first novel, these tools could be exceptionally beneficial, especially when grappling with how to structure the story. So, I find copilots to be quite useful, particularly for junior developers.
Q: That’s great. Now, how do you foster a culture of innovation and continuous learning within your tech team. How do you encourage everyone including the junior developers to continue learning and try new things?
A: I think it goes back to how tech teams have changed over the years. So, perhaps 10 to 15 years ago, you would have had someone called an architect. The architect would design the system in their ivory tower—a system that would be beautiful to them with nice pictures and stuff. Then, they'd pass that down to the developers, whose sole job would be to code against that design. They'd pass the code back to the architect. The architect would talk to the customer, and the customer would say, "I want this. "The architect would change it, pass it back to the developers, and the cycle would continue. The developers never talked to the people actually using their systems. They were in a kind of bubble and would just pass the coded things back to the architect.
That's changed now. The developers talk directly to the customer, and this goes back to what we were discussing about creativity earlier. They work with the customer to understand their needs. They then design and code it, passing it back to the customer. So, they're allowed to innovate, creating a system they think is best for the customer rather than just being told, "This is what you have to do." I think that's crucial.
This way of working also ensures a fast feedback loop for the developer, as they get direct feedback from the customer to make changes instantly. But also, the developer can come up with ideas. They can say, "Well, we could do this," and the customer says yes or no, and they go away with that.
So, this way of working gives them the chance to design things rather than saying, "This architect is the all-powerful being who designs everything, and they are the only person that can design stuff. "Everyone in the team is designing stuff, but that does come with a risk that the developer goes off on their own tangent, and it doesn't fit with the wider vision for the company.
So, you do need to have regular check-ins. We have daily stand-ups where the whole team comes together to discuss what they're working on. We also cross-code review each other's code to see what others are doing and learn from each other. And ensure our code is consistent because although one developer is perhaps working with a client, that developer might not be able to work with that client going forward. Someone else might have to step in, so we need some consistency of code and structures, and that's where the code reviews come in.
I think this structure works really well for us. I would not change it, but you need to have those safeguards in place—those stand-ups daily to ensure we're working towards the same goals and the code reviews to ensure consistency in what we're producing.
Q: What advice would you like to give to programmers who are aspiring to grow in their career?
A: So, when I started as a tester, I had no tech background. I did math and economics. It's very, very easy to be intimidated by the people that are already in the industry because they've perhaps had several years there. So, their experience is strong, and it's almost like they speak a different language.
I guess you could equate it to just rocking up at a hospital and trying to be a doctor. And people are talking to you, and it feels like a completely different language. And I think the thing to bear in mind is that, that's just come from experience and learning. It's not because these people are necessarily smarter than you or that you're thick in any way. It's because that's just become their experience, their life.
It's very much an experience-based industry. But just stick at it, because you'll get there.
Also, it's crucial to acknowledge the gaps in your experience. Allocate some dedicated time to learn the aspects you find challenging. You can kind of bluff it to some degree, but honestly, the best thing is to put some side time aside to learn those things because although it feels like you're not doing so much work in those early stages throughout your career, that's going to pay you dividends.
If you're just doing Java in your day job, learn another programming language. Spend some time, perhaps on a Friday afternoon, learning another programming language and play with that so that you can see, ah, that's consistent.
Touch typing has proven immensely beneficial for me as well. If there's one skill you should cultivate, it's touch typing – a proficiency that extends beyond programming, positively impacting various aspects of your life.
Q: And before we wrap up, just let's talk a little bit about your book "Flutter for Beginners." What motivated you to write it?
A: So, as I mentioned, I started "Flutter" during its beta phase and became an expert through years of hands-on experience, not just through theoretical knowledge. Observing the available literature for developers, I felt that most of it focused solely on a programming language, neglecting the comprehensive journey from designing a program to deciding on a language, to releasing it in app stores and maintaining it. The reason behind writing the book was to provide a guide for that holistic journey, to take readers from the initial decision-making of “Why choose "Flutter" over other options” right through the programming process, plugin usage for efficiency, testing procedures, release strategies, and handling bug reports.
Many newcomers to Flutter lack prior software project experience, making it crucial for them to grasp the entire process, as this might be their first project that transforms into a significant achievement. Just like Mark Zuckerberg's Facebook or Google's search, groundbreaking ideas often start as pet projects. But the book is not solely for experienced developers; it's a guide for anyone with an idea for an app capable of changing the world.
That's pretty inspiring. Thank you very much, Tom, for this really insightful conversation. Thank you for taking out the time to do this.
Flutter for Beginners - Third Edition was published in October 2023. You can buy the book here.
🛠️ Useful Tools ⚒️
Frugally-deep: a lightweight, header-only C++ library for running Keras model predictions, requiring only three additional header-only libraries and supporting a broad range of layer types and model complexities, without the need for linking against TensorFlow.
CppGuard: a tool for detecting deadlocks and lock misuse in C++ applications in Visual Studio, using minimal code changes for integration.
tch-rs: a software library that provides Rust bindings for PyTorch's C++ API, enabling developers to use PyTorch - a popular machine learning library - directly within Rust programming projects.
EclipseStore: a high-performance Java-native persistence solution enabling fast storage and retrieval of Java object graphs with microsecond response times and ultra-high throughput, ideal for creating speedy in-memory database applications and microservices.
That’s all for today.
We have an entire range of newsletters with focused content for tech pros. Subscribe to the ones you find the most useful here. Complete ProgrammingPro archives can be found here. Complete PythonPro archives are here.
📢 If your company is interested in reaching an audience of developers, software engineers, and tech decision makers, you may want to advertise with us.
See you next on the 4th of January, 2024!