Skip to main content

IT Workers Are Now Struggling to Find Work, as 'Picky' Companies Demand AI Skills

3 weeks 1 day ago
"Battered by years of mass layoffs, California tech workers were hoping the job market would rebound this year," reports the Los Angeles Times. "But things are getting worse." The class divide is widening in Silicon Valley as a tiny group of employees is landing unprecedented packages for AI skills, while many others struggle to find work. The have-nots are doing everything that used to guarantee great jobs — refreshing resumes, optimizing LinkedIn profiles and doing interviews — but companies are much more picky these days. The tech jobless are rethinking their lives. Some are taking pay cuts, others are leaving tech. Some are going back to study or launch startups. Some have retired.... Since 2022, more than 815,500 tech workers have been laid off, according to Layoffs.fyi, a website that tracks job cuts. The tsunami of pink slips surged in 2023, when companies that had gone on hiring sprees during the COVID-19 pandemic began to cut back. From January to April, U.S. tech employers announced 85,411 job cuts this year, up 33% from the same period last year, according to global outplacement and executive coaching firm Challenger, Gray & Christmas. The Public Policy Institute of California estimates that the number of information jobs — which includes jobs in hard-hit Hollywood as well as tech — tumbled 17% between the middle of 2022 and this February. The San Francisco Bay Area has been hardest hit, the institute said in a recent report, with the number of jobs declining by 0.4%, compared with 7.5% growth over a similar time span before COVID-19 slammed into the U.S. economy. Tech layoffs are also spilling over into other industries. Automaker General Motors laid off roughly 600 workers in its information technology department, and Walmart is reportedly laying off or relocating roughly 1,000 workers in its technology and products teams. Recruiters say companies have become much more selective, requiring AI skills, combining different positions and interviewing more people for each job. "You're seeing elongated hiring cycles," said Robert Lucido, senior director of strategic advisory at Magnit, a California company that helps tech giants and other businesses manage contractors, freelancers and other contingent workers. "There's more opportunity to fill the need that they truly want." Paul Flaharty, district president at staffing firm Robert Half in Los Angeles, said companies are laying off workers, but also creating new roles tied to AI initiatives. "For individuals that are displaced, it's really important that they find ways to upskill themselves so that they can make themselves as attractive as possible for these new jobs that are being created," he said. Kira Martins was already taking on more work in a small team at Snap — the parent company of disappearing messaging app Snapchat — when she was laid off in April. The company said the layoffs were to cut costs as it focuses on profitability, noting how employees are using AI to "reduce repetitive work, increase velocity, and better support our community, partners, and advertisers...." Martins, a 36-year-old Los Angeles resident, views AI as a tool and is optimistic about finding her next role. People still need to decide how to use AI and check the work it generates, she said. "In tech, you want to be a first adopter, because if you don't move quickly, it's very easy to become irrelevant," she said. "Everyone's kind of hopping on the AI train." A former Google worker (laid off more than a year ago) says he's still job hunting, according to the article, and "he's learned it's not enough to just apply in this competitive market. Workers really need to network and leverage their connections to get seen by hiring managers and stand out." But when 64-year-old product manager Bruce Bowers lost his job at Oracle — along with thousands of others — he just started his retirement early.

Read more of this story at Slashdot.

EditorDavid

CodeSOD: Caught a Mistake

3 weeks 1 day ago

Daniel recently started a new job. His first task was to fetch some data from the database and render it to the user. Easy enough, and there were already wrapper functions around the database to make it easy. He called execute_read, passed it a query, and checked the results.

There were no results. But the query definitely should have returned results. What was going on?

def execute_read(conn, query, params, only_one=False): result = None cursor = None try: start_time = time.time() cursor = conn.cursor() cursor.execute(query, params) if only_one: result = cursor.fetchone() else: result = cursor.fetchall() end_time = time.time() time_taken = end_time - start_time if env.is_production(): if time_taken > 0.4: logger.critical("long query", query=query, time_taken=time_taken) else: if time_taken > 0.2: logger.warning("long query", query=query, time_taken=time_taken) except Exception as err: # pragma: no cover logger.exception("execute_read exception", exception_msg=err, query=query) finally: logger.debug("execute_read debug", query=query, params=params, only_one=only_one) if not result: if only_one: result = {} else: result = [] if cursor: cursor.close() return result

There are a lot of things I don't like about this function. The only_one parameter, for starters. Note how the database library actually breaks that behavior out as different functions- that's a much more appropriate model, especially since you have wildly different return types depending on how that flag is set.

Similarly, checking env.is_production() to check a timing threshold is itself pretty awful. I can sympathize with wanting different timing constraints based on what environment you're in- but if that's the case, the timing constraint is the parameter. env.long_query_threshold should be the configuration parameter. Also, your database should be able to alert you to these kinds of things, so that it doesn't live in your code anyway.

But the WTF here is the promiscuous exception handler, which catches all errors and simply logs them. This created a situation where Daniel sent a query to the database and got no results. He didn't go straight to the logs and tried to debug it more directly, so it took him quite some time to find the execute_read exception log line which told him what was wrong: his SQL query had a syntax error.

Daniel writes: "I can't imagine the disaster that this causes if there's a network hiccup in production." Failing silently and returning empty results sets definitely is inviting a lot of confusion.

.comment { border: none; } [Advertisement] Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.
Remy Porter