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

推荐订阅源

K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
AI
AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 三生石上(FineUI控件)
Google Online Security Blog
Google Online Security Blog
N
News and Events Feed by Topic
Microsoft Security Blog
Microsoft Security Blog
AWS News Blog
AWS News Blog
S
Securelist
Schneier on Security
Schneier on Security
MyScale Blog
MyScale Blog
W
WeLiveSecurity
Hacker News: Ask HN
Hacker News: Ask HN
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
Project Zero
Project Zero
Recent Commits to openclaw:main
Recent Commits to openclaw:main
P
Proofpoint News Feed
I
Intezer
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
T
The Exploit Database - CXSecurity.com
宝玉的分享
宝玉的分享
L
LINUX DO - 热门话题
月光博客
月光博客
C
CERT Recently Published Vulnerability Notes
F
Fortinet All Blogs
GbyAI
GbyAI
博客园 - 聂微东
F
Full Disclosure
L
LINUX DO - 最新话题
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
IT之家
IT之家
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Security Affairs
I
InfoQ
The Hacker News
The Hacker News
雷峰网
雷峰网
Hacker News - Newest:
Hacker News - Newest: "LLM"
V2EX - 技术
V2EX - 技术
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
SecWiki News
SecWiki News
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
大猫的无限游戏
大猫的无限游戏
博客园_首页
B
Blog RSS Feed
S
Secure Thoughts
A
About on SuperTechFans

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! Is Morepath Fast Yet? Introducing Bob Strongpinion Punctuated Equilibrium in Software Morepath 0.15 released! Impressions of React Europe 2016 Morepath 0.14 released! Morepath 0.13 now with Dectate Dectate: advanced configuration for Python code JavaScript Dependencies Revisited: An Example Project The Incredible Drifting Cyber A Brief History of Reselect The Emerging GraphQL Python stack Thoughts about React Europe Build a better batching UI with Morepath and Jinja2 GraphQL and REST Server Templating in Morepath 0.10 10 reasons to check out the Morepath web framework in 2015 A Review of the Web and how Morepath fits in Morepath 0.9 released! Better REST with Morepath 0.8 Morepath 0.7: new inter-app linking They say something I don Life at the Boundaries: Conversion and Validation BowerStatic 0.4 released! Morepath 0.6 released! Morepath 0.5(.1) and friends released! New HTTP 1.1 RFCs versus WSGI Against On Naming In Open Source My visit to EuroPython 2014 Morepath 0.4.1 released (with Python 3 fixes) Morepath 0.4 and breaking changes Announcing BowerStatic Morepath 0.3 released! Morepath 0.2 Morepath Python 3 support The Call of Python 2.8 Morepath 0.1 released! WebOb and Werkzeug compared Morepath: from Werkzeug to WebOb Racing the Morepath: SQLAlchemy Integration The Centre Cannot Hold Breaking Morepath Changes Morepath Update How to do REST with Morepath Morepath Security the Gravity of Python 2 #python2.8 discussion channel on freenode Alex Gaynor on Python 3 Morepath Documentation Starting to Take Shape Back to the Center Morepath App Reuse Implementing Grok Grok: the Idea Why Linux Works for Me On the Morepath Reg, Now With More Generic! The New Zope as a Web Framework Jim Fulton, Zope Architect Renewing Zope Object Publishing The Weirdness of Zope The Rise of Zope My Exit from Zope Reg: Component Architecture Reimagined JSConf EU 2013 impressions Obviel 1.0! JS Dependency Tools Redux Obviel 1.0rc1 released! Succinct data structures
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