O’Reilly Programming Newsletter 2020/01/02

Lenny Lee
7 min readJan 8, 2021

O’Reilly의 온라인 학습을 통해 본 프로그래밍 언어의 트렌드입니다. 뉴스레터로 전달된 아티클이라서 블로그로 옮겨 보았습니다.

  • ML 분야에서 Python은 TensorFlow 및 PyTorch 등의 좋은 라이브러리를 가지고 있으며, 이는 많은 사람들이 Java에서 Python으로 이동하는 이유 중 하나입니다. 하지만 Java의 강력한 장점을 쉽게 버릴 수 없기 때문에 Java의 영향력은 쉽게 무너지지 않을 것 같습니다.
  • 팬데믹은 C의 영향력을 확장시켰습니다. 제조업체들은 락다운 기간 동안에도 시스템 가동이 필요하고, 이를 위한 프로젝트 및 임베디드 시스템의 C언어 수요가 늘었습니다. 또한 의료기기 같은 임베디드 소프트웨어를 사용하는 시스템의 사용이 늘어난 것도 그 이유 중 하나로 볼 수 있습니다. 이 트렌드가 팬데믹 이후에도 지속될 것인지 흥미롭게 지켜볼만한 것 같습니다.
  • 프로그래밍 언어의 feature에도 트렌드가 있으며, 동시성(Concurrency)은 이런 트렌드 중 하나입니다. Java는 2021년 9월까지 동시성 문제를 개선한 17버전을 계획하고 있는데, 그 사이 Kotiln의 사용이 늘어나고 있습니다. Rust는 2019년 말 비동기 지원을 stable 버전에 포함시켰고, 그 결과 2020년 가장 빠르게 성장한 언어 중 하나가 되었습니다.
  • 동시성 외에도 다른 feature들이 새로운 언어의 매력을 높이는 경우도 있습니다. Go는 Generics를 추가하는 과정에 있으며, 이 feature는 Kubernetes 등의 어플리케이션에서 잠재적으로 수천 줄의 코드를 줄여줄 수 있게 될 것입니다. 특히 C개발자들에게 Go는 제2언어로서 매력적인 선택이 될 수 있습니다.
  • C++은 11버전 이후 가장 중요한 릴리즈인 20버전의 출시로 인해 큰 변화를 맞이하고 있습니다. 더 안전한 코드 구현과 빠른 빌드를 가능하게 해 주는 modules와 비동기 프로그래밍을 쉽게 해 주는 coroutines가 가중 중요한 feature입니다.
  • low-code/no-code 프로그래밍은 주목할만한 또 다른 트렌드입니다. 특히 AI/ML에서는 거의 코드가 필요없는 마치 Excel 같은 도구처럼 되어가고 있는데, 이는 코드 작성 시간을 줄이는 대신 실제 수행해야 할 작업을 생각하는데 더 많은 시간을 사용할 수 있게 해 줄 것입니다.
  • 프로그래밍을 다차원적으로 이해하고 더 나은 시스템을 디자인하기 위해서라도 다양한 언어의 성격을 파악하고 제2언어를 배울 가치가 있다고 보입니다.

원문은 아래와 같습니다.

New year, new language

How trends are guiding choices, and what languages you should learn next

In the past strange year, we’ve spent less time looking out and more time looking inward — or at least we’ve spent more time with ourselves. For those of us stuck at home finding projects to occupy our time (or allow us momentary breaks from childcare), self-improvement has been the name of the game. For many, that may have even included learning a new programming language.

Choosing which language to pick up next is a personal and sometimes labyrinthine process: it can come on the back of a trend in software development, or it can come out of the combined elements of interest, need, and even community. You may want a high-level language, a functional language, or simply something that will do just what you want it to when you need it most. The choices can be as personal as they are varied.

Still, even if the reasoning behind learning a language is deeply personal, the benefits of learning a second language fall into clear categories. Programmers learn a new language in order to take advantage of new libraries, use new hardware, achieve new programming capabilities, or even gain a broader understanding of and perspective on programming choices.

This year, we examine how each of these categories has been influenced by trends in software development and in the new features being added to the languages themselves, and how this might influence your choices of what new languages to pick up in 2021.

New libraries

More often than not, it’s the library you choose, not the language.

Machine learning is currently everywhere, and Python is currently everywhere in machine learning. This is because Python has good machine learning libraries — notably TensorFlow and PyTorch — and it’s impossible to ignore this as the likely reason so many are moving to Python, and why Python may be overtaking Java in so many metrics. (O’Reilly online learning usage of Python is up 27%, while Java use is down 3%.)

Java isn’t likely to be knocked far off its block, thanks to its own robust libraries for collections, data structures, project management, and testing and its well-established and extensive ecosystem — a reminder that newer isn’t always easier.

New gadgets

C has seen a rise in popularity this year (up 12% in O’Reilly online learning usage), likely due to makers looking for projects to keep them busy during lockdown and exploring C for embedded systems. The pandemic has also increased the necessity for medical devices that use embedded software languages like C. As Marc Loy, author of Learning Java and the forthcoming Smaller C, notes:

I think we’re hearing more about C these days because more makers are encountering it for the first time as a language they want to use themselves. They’re searching for tutorials, reading histories, joining forums, and creating some really neat IoT projects on an ever-expanding list of microcontrollers. This world lives for eking good performance out of limited resources, and C is perfect for that work.

The embedded trend is one we’ll watch closely as more people are allowed to leave their houses. And although issues of performance have been around much longer than the pandemic and won’t likely go away on the back of it, understanding design for embedded systems certainly hones understanding of performance.

New capabilities

It could be said that individual programming languages are starting to have similar features, just implemented in different ways. This isn’t to say that programming languages are becoming indistinguishable from each other but rather that emerging features often seem to follow similar trend lines, and trends in language choices follow trends in features.

Concurrency has driven several of these trends: Java is on its way, through Project Loom, to improving concurrency in-language, though it’s currently looking unlikely that it will be included in the September 2021 long-term support release of Java 17 — so in the meantime, you might want to learn Kotlin. (Duncan McGregor and Nat Pryce, coauthors of Java to Kotlin, note that that “Java developers are productive in Kotlin really quickly — like it is meeting them half-way. Kotlin will help you adopt functional programming, but as a gradual process rather than a paradigm shift, and you can bring your existing Java along for the ride.”) Asynchronous programming was added to stable Rust at the end of 2019 as its own solution to concurrency. (Rust, incidentally, grew 94% in usage on O’Reilly online learning in 2020, the fastest-growing language on our platform.)

Other features are also driving interest in new languages: Go is in the process of adding generics, which could potentially reduce the lines of code in a popular application such as Kubernetes by the thousands. Jon Bodner, author of Learning Go, suggests that those who already know languages such as C would have a great experience with Go:

Go is a great second language for C developers. They have similar philosophies: simple syntax, a stable standard library, thousands of third-party libraries, and native compilation. Go adds efficient garbage collection and built-in concurrency support. Soon, generics will increase expressive power with minimal additional complexity. Now is a great time to learn Go.

C++ (up 10% on O’Reilly online learning) is looking to have a banner year thanks to the release of C++20, the most significant release since C++11 and the first version that has been standardized. Two of the most important new features are modules — led by Richard Smith at Google, which makes your code safer and allows for much faster build times — and coroutines — a feature that makes asynchronous programming easier to implement.

A new multidimensional understanding of programming

Knowing multiple programming languages improves your ability to think critically and multidimensionally about software development. Each new language a developer learns brings them closer to understanding how to design better systems. Java Champion and O’Reilly author and instructor Ben Evans advises Java developers looking for a second language to go anywhere that pushes your boundaries.

You should learn a language which changes and challenges your notions of programming as they have been formed by your experience with Java. A very different language to Java will teach you the most — learn Python to learn a simple dynamically typed language, Haskell to see how far you can take functional programming, Rust to turn your understanding of data ownership on its head, or C++ to understand why we needed to invent Rust in the first place — but learning any second language at all will teach you something.

O’Reilly Python instructor Matt Harrison suggests picking up C (“always good to understand what is going on behind the scenes”), Clojure (“exposure to functional constructs is brain melting and eye opening”), and JavaScript (because it “runs on more devices than anything else.”) JavaScript, incidentally, is up 40% in usage on O’Reilly online learning, meaning it certainly runs on our devices too.

This category includes another trend we’re keeping our eye on: low-code and no-code programming. We reached out to O’Reilly author and instructor Noah Gift for his take:

Many MBA programs, as well as analytics-driven organizations, are embracing no-code/low-code business intelligence, machine learning, and AI.…AI and ML are becoming like Excel, a tool readily available to solve modeling and business problems, but requiring little to no code.

The underlying benefit of low-code platforms is that they allow developers to spend less time writing code and more time thinking about what the code should actually do.

The advantage

The one common trend here in learning any new language: advantage. Each new library, platform, device, perspective, or programming choice gained by adding a new language to your utility belt is a distinct advantage in the everyday life of the working programmer. Marc Loy puts it best, and it’s a statement that’s set to guide our own look ahead into 2021 and beyond:

The programming landscape is evolving quickly like so many areas of tech. I know that adaptation is survival. If you understand how good coding works in a variety of environments, you will have an easier time dealing with whatever comes next. And that “whatever” is probably here already, so you need every advantage you can get.

--

--