Noutați

Announcing the new updated RAD Server Technical Guide

Back in 2019, David I wrote a fantastic guide to RAD Server that has been very popular in helping developers develop new, and migrate older systems towards a RESTful architecture. There have been a number of updates to RAD Server since the guide was originally launched, including a number of new components that have simplified and made RAD Server even more RAD!  We have also had a lot of feedback over time about using the guide, and we have incorporated a large part of that into the new, heavily revised version. Today we launch the first part of that guide but with a refreshed approach. Now you will find not only the text guide but also source code examples that you can directly download from Github for both Delphi and C++Builder, and also includes a comprehensive video series supporting each chapter.  To download the latest RAD Server Technical Guide for Free, just click the next button: Download guide Once you have downloaded the new guide, you will find in the paper the links for the GitHub repository with all the examples as well as the video series included. The list of the current published chapters is: Chapter 1: What’s RAD Server – IntroductionChapter 2: Using the RAD Wizard to Create a “hello world”Chapter 3: Creating your first CRUD ApplicationChapter 4: REST DebuggerChapter 5: Using FireDAC Batch Move and JSONWriterChapter 6: JSONValue, JSONWriter and JSONBuilderChapter 7: Creating your own customized endpointsChapter 8: Accessing the built-in analyticsChapter 9: Deploying RAD Server (Windows, Linux & Docker)Chapter 10: RAD Server Lite Our plan is to keep this guide updated and release new chapters progressively in the future so stay tuned for upcoming updates. Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder. Design. Code. Compile. Deploy. Start Free Trial   Upgrade Today    Free Delphi Community Edition   Free C++Builder Community Edition

Read More

Generative AI’s Impact on Developers

There is a growing belief in the developer community that future software development will be performed by machines rather than humans by 2040. Software development will undergo a radical change with the combination of machine learning, artificial intelligence, natural language processing and code generation that draws from large language models (LLMs). Most organizations believe that there will be a 30-40% improvement in overall developer productivity with AI. While these arguments have some merit, I do not believe developers will be fully replaced. Instead, I believe generative AI can augment developers to support faster development and higher-quality code. I’ll address the impact of generative AI on the development community under three pillars: Automation and productivity Quality engineering and compliance Ways of working Automation and Productivity There will be a focus on increased automation all the way from business planning to operations of applications. LLMs can help provide better alignment of user stories to business requirements. In fact, one of the best use cases for generative AI during planning phases is to auto-generate user stories from business requirements documents. Since ambiguity of requirements or guesswork is taken out of the equation, one can expect a clearer “definition of done” through the auto-creation of acceptance criteria. In a typical development cycle, 15%-20% of coding defects are attributed to improperly defined requirements. Generative AI augmentation can result in significant reduction of those defects. Generative AI augmentation can help developers with better planning and estimation of work. Rather than relying on personal experience or home-grown estimation models, LLMs can better predict the complexity of work and developers and continually learn and adapt through multiple development sprints. AI-augmented code creation can allow developers to focus on solving complex business problems and creative thinking rather than worrying about repetitive code generation. Over the last decade or so, the perception of software development as a creative pursuit has been a dying phenomenon. With AI, I think that more and more younger developers will be attracted to the field. AI will put the “fun” back in coding. AI-assisted DevOps and continuous integration will further accelerate deployments of code so developers can focus more on solving complex business problems. Deployment failures due to human errors can be drastically reduced. Elaborating on the above, newer and less experienced developers can also generate higher-quality code with AI-augmentation, leading to better overall consistency of code in large programs. Overall, from a development standpoint, I think AI augmentation will free up 30% of developers’ time to work on enhancing user experience and other value-added tasks. Quality Engineering and Compliance In a hybrid cloud world, solutions will become more distributed than ever, making system architecture more complex. LLMs can assist in regulating design documents and architecture work products to conform to industry/corporate standards and guidelines. In essence, LLMs can act as virtual Architecture Review Boards. In a typical development life cycle, architecture/design reviews and approvals make up 5%-8% of work and augmenting the process with generative AI capabilities can cut that time in half. Ssecurity compliance for cloud-based solutions is imperative. LLMs can assist in ensuring such compliance very early on in the development life cycle, leading to more predictable deployments and timely program delivery. Generative AI-augmented test case creation can optimize the number of test cases needed to support the development while increasing the […]

Read More

How To Use Variable Templates In Modern C++

The template is one of the great features of modern C++. They are a simple and very powerful statement in C++ that defines the operations of a class or function. The C++14 standard and above allows the creation of variables that are templated. In this article, we will explain variable templates in C++ with examples that can be used in a professional IDE and compiler that supports C++14, C++17, and over.  First of all, let’s remind ourselves what a C++ template is. What is a template in C++? A template is a very powerful statement in C++ that simply defines the operations of a class, a function, an alias, or a variable and lets the user apply the same template on different types in those template operations. Templates are like macros in C++, considered in compilation except compiler checks types used before the template is expanded in its terms. In the compilation mechanism of a template in C++, the source code contains only a template for a function or class, but when it is compiled, the same template can be used on multiple data types. Templates are powerful entities that can be parameterized by one or more parameters. These parameters can be type template parameters, non-type template parameters, and template template parameters (parameters which are themselves templates). What is a variable template in modern C++? A variable template is used to define a family of variables or static data members. If a static data member is instantiated from a static data member template, it is called an instantiated static data member. A variable template can be introduced by a template declaration at namespace scope, where a variable declaration declares a variable. The C++14  standard and above allows the creation of variables that are templated. In C++11, only functions, classes, or type aliases could be templated.  Syntax of a variable template;   template variable_declaration   The usual rules of templates apply to such declarations and definitions, including specialization. Where is a simple variable template example in modern C++? Variable templates are used to instantiate the variables separately for the type. For example, we can assign 9.80665 to the g variable in T form ( i.e. T(9.80665) ) as a float or double or long double type and that would be g or g or g or g in template usage. Here is a simple variable template example that is used to define standard gravity value.   template constexpr T gravity = T(9.80665);   Is there a variable template instantiation example in modern C++? Now, let’s use this in a template. We can define a force template (force = mass x gravity) as shown below:   template T force(T mass) // function template { return mass*gravity; // gravity is a variable template instantiation }   here gravity is a variable template instantiation. Is there a full example of variable templates in modern C++? Here is an example variable template instantiation to different types. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29   #include   template T gravity = T(9.80665);   // template constexpr T gravity = T(9.80665);   template T force(T mass) // function template { return mass*gravity; // gravity is a variable template instantiation } int main() { auto g1 = gravity; […]

Read More

C11 Threads in Visual Studio 2022 version 17.8 Preview 2

C11 Threads in Visual Studio 2022 version 17.8 Preview 2 Charlie Barto September 26th, 20232 3 Back in Visual Studio 2022 version 17.5 Microsoft Visual C gained preliminary support for C11 atomics. We are happy to announce that support for the other major concurrency feature of C11, threads, is available in Visual Studio version 17.8 Preview 2. This should make it easier to port cross-platform C applications to Windows, without having to drag along a threading compatibility layer. Unlike C11 atomics, C11 threads do not share an ABI with C++’s facilities, but C++ programs can include the C11 threads header and call the functions just like any C program. Both are implemented in terms of the primitives provided by Windows, so their usage can be mixed in the same program and on the same thread. The implementations are distinct, however, for example you can’t use the C11 mutexes with C++ condition variables. C11 contains support for threads and a variety of related concurrency primitives including mutexes, condition variables, and thread specific storage. All of these are implemented in Visual Studio version 17.8 Preview 2. Threads Threads are created with thrd_create, to which you pass a pointer to the desired entry point and a user data pointer (which may be null), along with a pointer to a thrd_t structure to fill in. Once you have a thrd_t created with thrd_create you can call functions to compare it to another thrd_t, join it, or detach it. Functions are also provided to sleep or yield the current thread. int thread_entry(void* data) { return 0; } int main(void) { thrd_t thread; int result = thrd_create(&thread, thread_entry, NULL); if(result != thrd_success) { // handle error } result = thrd_join(thread, NULL); if(result != thrd_success) { // handle error } return 0; }   A key difference between our implementation and C11 threads implementations based on pthreads is that threads can not detach themselves using thrd_current() and thrd_detach(). This is because of a fundamental difference in how threads work on Windows vs Unix descendants and we would require a shared datastructure that tracks thread handles to implement the typical behavior. On Unix derivatives the integer thread ID is the handle to the thread and detaching just sets a flag causing the thread to be cleaned up immediately when it finishes. This makes detached threads somewhat dangerous to use on Unix derivatives, since after a detached thread exits any other references to that thread ID will be dangling and could later refer to a different thread altogether. On Windows the handle to a thread is a win32 HANDLE and is reference counted. The thread is cleaned up when the last handle is closed. There is no way to close all handles to a thread except by keeping track of them and closing each one. We could implement the Unix/pthreads behavior by keeping a shared mapping of thread-id to handle, populated by thrd_create. If you need this functionality then you can implement something like this yourself, but we don’t provide it by default because it would incur a cost even if it’s not used. Better workarounds may also be available, such as passing a pointer to the thrd_t populated by thrd_create via the user data pointer to the created thread. Mutexes Mutexes are provided through the mtx_t structure and […]

Read More

Clang v15 compiler support coming to C++Builder 12

For C++ developers who want to take advantage of new ISO C++ language features in Clang v15 along with the power and productivity of RAD development using C++Builder, stay tuned to the Embarcadero blogs and C++Builder product website for news about the next release of C++Builder. Note: “This blog post is based on a pre-release version of the RAD Studio software and it has been written with specific permission by Embarcadero. No feature is committed until the product GA release.” David Millington, Embarcadero Product Manager, on August 31, 2023 presented a webinar titled “Behind the Build: RAD Studio and C++Builder 12.0” that previewed the upcoming Clang compiler upgrade and integration of Whole Tomato’s Visual Assist into the IDE.  You can watch the replay of the webinar at https://www.youtube.com/watch?v=B0Be_NFmEEE The next release of C++Builder with Clang v15 support will include the following toolchain enhancements: Clang: based on Clang 15, named ‘bcc64x’ C runtime: uses the Universal C Runtime (UCRT) C++ runtime: a new RTL, based on several open source areas STL: libc++ Linker: LLVM lld Debug format: PDB (with IDE support) The toolchain emits COFF object files and uses the Itanium ABI and mangling The default language standard is C++17 and C99 Here are two screen grabs from the August 31, 2023 David Millington webinar: Embarcadero Special Offer: Buy RAD 11.3 today and Apply to join the RAD 12 beta The promotional offer is ending soon (4 days left as of this blog post). Find out additional information at https://www.embarcadero.com/radoffer Keep Up To Date on C++Builder and ISO C++ To keep up to date on using C++Builder and the ISO C++ language you should absolutely bookmark and read everything that Yılmaz Yörü posts on his Embarcadero blog at https://blogs.embarcadero.com/author/yilmazyoru/ Yilmaz also has a great site for learning C++ at https://learncplusplus.org/ Stay tuned to the Embarcadero C++Builder product page for additional information and news.   Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder. Design. Code. Compile. Deploy. Start Free Trial   Upgrade Today    Free Delphi Community Edition   Free C++Builder Community Edition

Read More

MSVC Machine-Independent Optimizations in Visual Studio 2022 17.7

MSVC Machine-Independent Optimizations in Visual Studio 2022 17.7 Troy Johnson September 25th, 20232 3 This blog post presents a selection of machine-independent optimizations that were added between Visual Studio versions 17.4 (released November 8, 2022) and 17.7 P3 (released July 11, 2023). Each optimization below shows assembly code for both X64 and ARM64 to show the machine-independent nature of the optimization. Optimizing Memory Across Block Boundaries When a small struct is loaded into a register, we can optimize field accesses to extract the correct bits from the register instead of accessing it through memory. Historically in MSVC, this optimization has been limited to memory accesses within the same basic block. We are now able to perform this same optimization across block boundaries in many cases. In the example ASM listings below, a load to the stack and a store from the stack are eliminated, resulting in less memory traffic as well as lower stack memory usage. Example C++ Source Code: #include bool compare(const std::string_view& l, const std::string_view& r) {    return l == r; } Required Compiler Flags: /O2 X64 ASM: 17.4 17.7 sub        rsp, 56 movups  xmm0, XMMWORD PTR [rcx] mov        r8, QWORD PTR [rcx+8] movaps  XMMWORD PTR $T1[rsp], xmm0 cmp        r8, QWORD PTR [rdx+8] jne        SHORT $LN9@compare mov        rdx, QWORD PTR [rdx] mov        rcx, QWORD PTR $T1[rsp] call       memcmp test       eax, eax jne        SHORT $LN9@compare mov        al, 1 add        rsp, 56 ret        0 $LN9@compare: xor        al, al add        rsp, 56 ret        0 sub         rsp, 40 mov        r8, QWORD PTR [rcx+8] movups  xmm1, XMMWORD PTR [rcx] cmp        r8, QWORD PTR [rdx+8] jne         SHORT $LN9@compare mov        rdx, QWORD PTR [rdx] movq      rcx, xmm1 call        memcmp test        eax, eax jne         SHORT $LN9@compare mov        al, 1 add         rsp, 40 ret         0 $LN9@compare: xor         al, al add         rsp, 40 ret         0   ARM64 ASM: 17.4 17.7 str         lr,[sp,#-0x10]! sub         sp,sp,#0x20 ldr         q17,[x1] ldr         q16,[x0] umov        x8,v17.d[1] umov        x2,v16.d[1] stp         q17,q16,[sp] cmp         x2,x8 bne         |$LN9@compare| ldr         x1,[sp] ldr         x0,[sp,#0x10] bl          memcmp cbnz        w0,|$LN9@compare| mov         w0,#1 add         sp,sp,#0x20 ldr         lr,[sp],#0x10 ret |$LN9@compare| mov         w0,#0 add         sp,sp,#0x20 ldr         lr,[sp],#0x10 ret str         lr,[sp,#-0x10]! ldr         q17,[x1] ldr         q16,[x0] umov        x8,v17.d[1] umov        x2,v16.d[1] cmp         x2,x8 bne         |$LN9@compare| fmov        x1,d17 fmov        x0,d16 bl          memcmp cbnz        w0,|$LN9@compare| mov         w0,#1 ldr         lr,[sp],#0x10 ret |$LN9@compare| mov         w0,#0 ldr         lr,[sp],#0x10 ret   Vector Logical and Arithmetic Optimizations We continue to add patterns for recognizing vector operations that are equivalent to intrinsics or short sequences of intrinsics. An example is recognizing common forms of vector absolute difference calculations. A long series of bitwise instructions can be replaced with specialized absolute value instructions, such as vpabsd on X64 and sabd on ARM64. Example C++ Source Code: #include void s32_1(int * __restrict a, int * __restrict b, int * __restrict c, int n) { for (int i = 0; i < n; i++) { a[i] = (b[i] - c[i]) > 0 ? (b[i] – c[i]) : (c[i] – b[i]); } } Required Flags: /O2 /arch:AVX for X64, /O2 for ARM64 X64 ASM: 17.4 17.7 $LL4@s32_1: movdqu  xmm0, XMMWORD PTR [r11+rax] add     ecx, 4 movdqu  xmm1, XMMWORD PTR [rax] lea     rax, QWORD PTR [rax+16] movdqa  xmm3, xmm0 psubd   xmm3, xmm1 psubd   xmm1, xmm0 movdqa  xmm2, xmm3 pcmpgtd xmm2, xmm4 movdqa  xmm0, xmm2 andps   xmm2, xmm3 andnps  xmm0, xmm1 orps    xmm0, xmm2 movdqu  XMMWORD PTR [r10+rax-16], xmm0 cmp     ecx, edx jl      SHORT $LL4@s32_1 $LL4@s32_1: vmovdqu xmm1, XMMWORD PTR [r10+rax] vpsubd     xmm1, xmm1, XMMWORD PTR [rax] vpabsd     xmm2, […]

Read More

Livechatting cu FreshChat – soluția de pentru a crește vânzările, satisfacția și loialitatea clienților in 2023

Livechatting este o modalitate eficientă și interactivă de a comunica online cu clienții potențiali sau existenți ale afacerilor online (e-commerce). Dacă ești interesat de o soluție de livechatting care să îți ofere funcții avansate, integrări ușoare și rezultate măsurabile, atunci acest articol este pentru tine. În acest articol, îți vom prezenta soluția de livechatting FreshChat de la Freshworks, o platformă care îți permite să inițiezi conversații în timp real cu vizitatorii e-shopului, să le oferi suport, să le faci oferte și să le fidelizezi. Vei afla cum să alegi ediția potrivită pentru afacerea ta, cum să o configurezi pe site-ul tău web, cum să folosești funcțiile avansate de chatbot, omni-chanel comunicații, cum să monitorizezi și să analizezi performanța echipei de customer service, cum să o optimizezi pentru a îmbunătăți conversația cu clienții, La finalul articolului, vei înțelege cum te poate ajuta soluția de livechatting de la Freshworks să crești vânzările, satisfacția și loialitatea clienților. Introducere: ce este livechatting și de ce este important pentru afacerea ta Livechatting este o modalitate de a comunica online cu alte persoane prin intermediul unui sistem de chat online care permite conversații în timp real. Livechatting este important pentru un business online, mai ales pentru unul care se ocupă de e-commerce, deoarece îi poate ajuta să își atingă scopul de creștere a bazei de clienți și a numărului de comenzi. Iată cum: Platformele de livechatting oferă o modalitate eficientă și interactivă de a comunica online cu clienți potențiali și existenți, care îți poate aduce beneficii semnificative pentru afacerea ta de e-commerce. În continuare, îți vom prezenta soluția de livechatting de la Freshworks, o platformă completă și personalizabilă care îți permite să creezi conversații în timp real cu vizitatorii site-ului tău web. Freshworks: o soluție de livechatting completă și personalizabilă FreshChat de la Freshworks este o soluție de automatizare a procesului de comunicare conversațională, care îți ajută echipa de customer support să comunice mai ușor cu clienții pe mai multe canale, cum ar fi chat web, email, telefon și platforme de comunicare socială ca WhatsApp, Instagram sau iMessage. Cu ajutorul acestei platforme se pot crea diferite scenarii de interacțiunie cu vizitatorii unui e-shop, cum ar fi: FreshChat de la Freshworks îți permite să creați conversații personalizate și relevante cu clienții Dvs, care să ajute la creșterea ratei de conversie, satisfacția și loialitatea clienților. Opțiuni de omni-channel communication oferite de FreshChat Canalele de comunicare cu potențiali clienți oferiți de către platforma FreshChat sunt următoarele: FreshChat îți permite să conectezi oricare dintre aceste canale cu inboxul tău unificat, astfel încât să poți gestiona toate conversațiile cu clienții dintr-un singur loc. De asemenea, FreshChat îți oferă funcții avansate de chatbot, co-browsing, video și voce, care îți permit să automatizezi și să personalizezi conversațiile cu clienții. Funcționalități avansate de livechatting de la Freshworks Freddy este chatbot-ul inteligent de la Freshworks, care îți permite să automatizezi și să personalizezi conversațiile cu clienții tăi. Cu Freddy, poți să oferi suport clienților 24/7, să le oferi răspunsuri rapide și eficiente, să le rezolvi problemele și să le îndeplinești cererile. Freddy are următoarele beneficii pentru afacerea ta: Dacă vrei să afli mai multe despre Freddy, poți vizita pagina Freddy chatbot by Freshworks. Cum să monitorizezi și să analizezi performanța soluției de livechatting de la Freshworks: rapoarte, metrici și feedback Funcționalitățile de analitică a conversațiilor oferită […]

Read More

What Is Aggregate Member Initialization In C++?

The Aggregate Member Initialization is one of the features of C++. This feature is improved and modernized with C++11, C++14 and C++20. With this feature, objects can initialize an aggregate member from braced-init-list. In this post, we explain what the aggregate member initialization is and what were the changes to it in modern C++ standards. What is aggregate member initialization in modern C++? Aggregate initialization initializes aggregates. Since C++11, aggregates are a form of listed initializations. Since C++20 they are direct initializations. An aggregate could be an array or class type (a class, a struct, or a union).  Here is the general syntax,   T object = {arg1, arg2, …};   In C++11 and above, we use without = as below,   T object {arg1, arg2, …};   In C++20, there are 3 new options that we can use,   T object (arg1, arg2, …); T object = { .designator = arg1 , .designator { arg2 } … }; T object { .designator = arg1 , .designator { arg2 } … };   How to use aggregate member initialization in modern C++? C++14 provides a solution to problems in C++11 and above, for example in C++14, consider we have x, y coordinates in a struct, we can initialize them as below in a new xy object,   struct st_xy { float x, y; };   struct st_xy xy{ 3.2f, 5.1f };   In modern C++, consider that we have a struct that has a, b, c members. We initialize first two members as below,   struct st_x { short int a, b, c; };   struct st_x x{ .a = 10, .b = 20}; // x.c will be 0   We can directly initialize as below too,   struct st_y { int a = 100, b = 200, c, d; } y;   In C++17 and above, we can use this st_y as a base and we can add a new member to a new struct, then we can initialize as below,   struct st_z : st_y { int e; };   struct st_z z{ 1, 2, 3, 4, 5};   What restrictions are there for the aggregate member initialization in C++? If we consider the C++17 standard, an aggregate initialization can NOT be applied to a class type if it has one of the below, private or protected non-static data members, a constructor that is user-provided, inherited, or explicit constructors (explicitly defaulted or deleted constructors are allowed), base class or classes (virtual, private, protected), virtual member functions If we consider the C++20 standard, an aggregate initialization can NOT be applied to a class type if it has one of the below, private or protected non-static data members, user-declared or inherited constructors, base class or classes (virtual, private, protected), virtual member functions Is there a full example of aggregate member initialization in C++? Here is a full example that explains simply most used features of aggregate member initialization, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42   #include   // Aggregate in C++14 struct st_xy { float a, b; };   struct st_xy xy{ 3.2f, 5.1f };   struct st_x { […]

Read More

Will ChatGPT Replace Human Software Developers? Probably Not

Since the release of ChatGPT, there has been a great deal of hype around generative AI and how companies can leverage it to cut costs and democratize software and application development. Naturally, with discussions of cost-cutting and democratization come whispers about what will happen to software developers. This is a real and valid concern, but software developers’ skills, expertise and creativity are still very much needed. While generative AI and AI code generation tools like ChatGPT have shown some promise and potential benefits, they are still in their infancy—like many other innovative technological advancements. We also don’t know what scenarios they may present down the road or their true abilities when the technology matures. For instance, how will it integrate with other technologies? We don’t know what will happen when a ChatGPT-generated line of code breaks or needs to be changed. We don’t know if it can provide a novel solution to a unique problem or what security threats it will present. Given these unknowns, technology executives should think twice about replacing experienced and creative technology talent, such as software developers, with AI code generators. Will ChatGPT create novel code to solve a unique problem never encountered before? Probably not. A Tale as Old as Time (Or at Least a Decade) The technology industry has been searching for and developing new ways to make certain software development tasks much easier and more streamlined for years. One example of this is low-code/no-code. The notion of simplifying application development and replacing software developers with laypeople (citizen developers) has been around for more than a decade now, as low-code and no-code solutions have grown more popular. These solutions have promised that companies don’t need technical talent to get their software and app projects off the ground. However, if you look at the impact of these solutions today, their use can result in large amounts of technical debt and almost always require the skill of experienced software developers. The reason? Building complex software and applications is extremely difficult; it’s an art. Low-code and no-code solutions have their rightful place and can make things easier if a company is looking to launch a simple app or static web page. These solutions can increase the pace of development and time-to-market and enable everyday people without any development skills to facilitate them. However, they are not actually a complete solution and often overlook aspects of development that a human software developer would typically address. Without a skilled expert involved, low-code/no-code platforms often can’t solve a unique problem a company has. So, how does this relate to AI code generators like ChatGPT? Here’s how. A Similar Situation—With One Key Difference When thinking about their place in the development process, AI code generators are not that different from low-code or no-code solutions. The thinking is that they will also enable non-technical individuals to create software and applications with ease. Yet, there is one key difference—they promise expertise, too. But is the expertise coming from the AI code generator or the person piloting it? The answer is simple; it is not from the code generator. There have been examples of companies and individuals that have tried using ChatGPT to build code, and they have appeared to be successful. However, without the input of the individuals using it, it never would […]

Read More

Google De-Recruits 100s of Recruiters ¦ ARM Valued at $45½B in IPO

Welcome to The Long View—where we peruse the news of the week and strip it to the essentials. Let’s work out what really matters. This week: Google fires hundreds of recruiters, and ARM gets a sky-high valuation. 1. Layoffs for the recruiters themselves First up this week: Google’s hiring has slowed to such an extent that it has far too many in-house recruiters. Boo hoo? Analysis: Don’t shed a tear at task shedding I get it. Many reading this care little for the typical recruiter. All too often they seem like pointless brokers—adding no value to the process yet receiving a huge bonuses. But this news is the latest indication that DevOps jobs are harder to come by. Louise Matsakis has the scoop: Google lays off hundreds on recruiting team “Hard decision”Google is laying off hundreds of people across its global recruiting team as hiring at the tech giant continues to slow. … Workers who were laid off began learning their roles had been eliminated earlier today, according to posts on social media.…Google began reducing the speed of its hiring last year, after adding tens of thousands of workers in 2020 and 2021. … Google spokesperson Courtenay Mencini said, … “In order to continue our important work to ensure we operate efficiently, we’ve made the hard decision to reduce the size of our recruiting team.” Bring in the RecruitBot 4000. galaxytachyon explains: How likely is it that this is because of AI taking over the jobs? Sift through resumes, contact candidates, schedule some interviews, connect the hiring manager to the candidate, even getting some extra information from the candidate via email or phone calls are all things an LLM can efficiently do. They may actually do it even better than a regular human, since they might “know” more about the role and the technical requirements than an average [recruiter]. AI recruiters—and AI developers, too. Here’s Qbertino: I don’t expect those jobs to return. … After 23 years in IT I’m looking into a … career switch myself. Our industry is fully industrialized, custom coding is by now only for mostly totally broken legacy **** that will be replaced by SOA subscriptions within the next few years and what’s still left to code will be mostly done by AI quite soon I suspect.…Time to move on. It was an awesome ride but we’ve now finally built the bots that will replace us. Nice. This will spell more wealth for everyone in the long run even if we are out of cushy jobs with obscene salaries. When Google catches a cold, do other DevOps shops sneeze? Not in gijames1225’s experience: It’s weird being at a midsize company that has only accelerated hiring for engineers while the big players all go through these layoff cycles. The cynic in me sees them as token displays of fiscal responsibility being made for shareholders and a weird performativity of not wanting to be outdone by other tech giants. Another bit of me wonders about general productivity at these places if they can layoff so many people and nothing really appears to change (from a consumer perspective). All of which makes this Anonymous Coward wonder: I wonder what happens now to those who have threatened to quit or were reluctant to come in to physical offices. Meanwhile, u/saracenraider has questions: Do […]

Read More