惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
IT之家
IT之家
C
Check Point Blog
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
M
MIT News - Artificial intelligence
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
F
Fortinet All Blogs
V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
MyScale Blog
MyScale Blog
爱范儿
爱范儿
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)

Secret Weblog

Becoming More Xee: A Modern XPath and XSLT Engine in Rust Looking for new challenges! Repeat Yourself, A Bit The Curious Case of Quentell The Humble For Loop in Rust The Humble For Loop in JavaScript Don Question Best Practices I Was a 1980s Teenage Programmer Part 5: Achieving Assembly I Was a 1980s Teenage Programmer Part 4: The Call of Assembly The Tooling Shift I Was a 1980s Teenage Programmer Part 3: MSX-2 JavaScript: when you need two ways to do it! Bloat and Retrofuturism Refreshing my Blog Again Random Rust Impressions Apilar: An Alife System I Was a 1980s Teenage Programmer Part 2: Olivetti M24 I Was a 1980s Teenage Programmer: the Alphatronic SolidJS fits my brain Is premature optimization the root of all evil? Framework Patterns: JavaScript edition Roll Your Own Frameworks Framework Patterns Secret Weblog Highlights Refactoring to Multiple Exit Points mstform: a form library for mobx-state-tree Seven Years: A Very Personal History of the Web Morepath 0.16 released!
Empowering Programming Languages
Martijn Faassen · 2024-05-27 · via Secret Weblog

I think, for me, becoming enamored by a programming language requires a sense of empowerment by that language. "Now I can build all the things!" It also requires a certain sense of conceptual unity; it can't be too messy. It also cannot be too low level: it needs the ability to do abstraction. And I need to be actually using it a lot for real world tasks; it can't just be for toy problems.

In my developer life there are two languages I have become truly enamored by. Python in 1998 and Rust, a few years ago. I have appreciated other languages but this is more.

Python

Back in 1998 I learned the Python programming language. This was in the now difficult to imagine era where you needed to explain to other programmers that Python was a programming language that exists. The RustNL conference I went to recently had about the same amount of people there as the first Python conference I went to in January of 2000, about 300 people, but that Python conference was the only one in the world.

I initially picked up Python as I wanted a scripting language to help me automate some tasks around my alife simulation C++ codebase.

I fell into my first Python job a few weeks after I learned the language. They hired me to rewrite a piece of failing DOS batch files that drove some database task. "Can I use Python?" I asked during the interview. "Is that a readable language? It's really important that it's readable." I answered yes. I was reading the Python newsgroup a while later at work, and it was full of people yearning to be able to use Python at work. And there I was.

It became a joke at work that I would offer to solve any random problem with Python. I was passionate about Python. Why?

Python empowered me. I had been developing in C++ (and Delphi) in the years previously. Python brought back some joy I had lost since I used BASIC. Compared to C++ especially, Python was concise, very malleable, supporting quick iterative development.

Python was good to me. I made friends with other people who used Python. We built a CMS in Python (and Zope) and a little business around it. The second developer we hired explicitly wanted to be hired as a Python developer, so thrilled he was that he could use the language for work.

I learned web development, test driven development, and many other things with Python. I had fun with it. I even made a game with Python once.

I wrote the first emails that kicked off the EuroPython conferences. The first email I sent was to Guido van Rossum, hey, we're organizing a European python conference, can I tell people you're coming? He answered yes 1, and then I mailed a lot of other people that we were organizing a conference and Guido was going to be there. Then, thankfully, others did most of the work in organizing it.

Python has also hurt me, when I was critical about choices made by the developers of the language. When you care about something, it can hurt you. But that pain is insignificant compared to the many good things Python has brought me.

Rust

Rust is the first programming language since Python where I feel a similar sense of empowerment. In a bit of irony as it brings back what I lost when I gave up C++ all those years ago. Control over the machine. Performance. Static types.

I use it to implement high performance algorithms, programming languages, simulations. I wrote an alife simulation in C++ years ago and an alife simulation helped to bring me to Rust.

Surprisingly enough, as I have been using Python for these purposes for years, I build command line tools and REST web services in Rust too. That seems strange. When you have a hammer, everything looks like a nail, right? That's probably part of it. But there is also good reasons to use Rust for such purposes. Rust's type derived, macro-based techniques for doing things like (de)serialization and parsing command line arguments are that powerful. (See for instance serde,2 clap.)

There is also the great blessing of the Rust tooling. Even if Rust were a completely different language, its tooling would help to make it attractive. You get a compiler, autoformatter, test runner, dependency manager, type checker, linter, documentation generator, editor integration, all without having to mess around with dependencies and setting up config files. It just works right away. It's awesome!

C++ I gave up on because of mental overhead. Too many details, too many crashes, slow iteration time. Rust gives me back the power of that language with less load on my brain, fewer nagging worries. It's more demanding than Python in some ways, and certainly not easy to learn, but surprisingly, often it actually taxes me less. The robust type checker, borrow check and analyzer really give a lot of peace of mind. You can do a giant refactor and have some confidence that once it compiles, it works. Runtime bugs are rare.

It's funny to see the feeling "oh this software was written in , it must be cool!" get replaced with a new language. And that makes me rather suspicious of that feeling. I do think there are legitimate reasons to feel this way2, but it's not all rational for sure.

Rust is a lot more popular already than when I started with Python, but just like with Python, I see people wistful about being able to use Rust at work. I've been working with professionally for almost two years now. After I realized I could build an alife simulation in Rust over a weekend, I figured I was competent enough, and started to look for opportunities to use it professionally. And I'm going to say, you may have more power to shape your work environment than you think.

So here I am again, with another language that makes me think I can conquer the world. Or at least do cool things.

Of course this is a personal journey; other languages empower others. I hope one gives you that feeling.

1

This is not likely going to work today. Guido has become a lot busier. It was a different era.

2

Legitimate reasons to think so:

  • "this is written by someone in a small self selected community of enthusiasts." Was true for Python once. For Rust, still is more true

  • "It has the quality of being easy to read". More true for Python though the language is more complex than it used to be, with Rust it's an acquired taste.

  • "It has the quality of being efficient." More true for Rust, never really true for Python.

Copied! Copy code to clipboard