为什么又对多种编程语言兴趣?
每个开发者入门的时候,都考虑过应该学哪门语言最好。程序员爱说一个梗,“php是世界上最好的语言”。接下来就会有一堆人出来打起口水仗来,谁都认为自己的语言最好。虽然大家都知道语言有各自的优劣势,没有绝对高低之分。现在ai来编程,生成独立项目的代码一般是前端全栈语言。我看最近海外独立开发者,使用的工具栈也多是基于typescript的前端全栈。有时候也看到一个新词出来,分不清是新语言,还是在基于某语言产生的新框架。于是又想梳理下当前主流语言与涉及的框架。
如何用ai学好一种新的语言?
- 先问AI目前有哪些主流语言,他们的关系,哪些是框架,不是新语言,依赖的底层框架是用的什么语言。比如nextjs/node.js/javascript
- 直接看完整的语法手册,看大纲,略过基础逻辑控制之类的通用,找最感兴趣的。比如并发/内存清理设计。
- 把具体的语言细节,总会有自己的疑问,带着疑问再来问一次ai,推荐和自己最熟悉的语言做对比。比如rust和java内存管理区别。
编程语言有哪些不同的特色?
1. Python
这几年ai火,python依然是AI和数据科学的首选。 数据的源头要用爬虫,也有很多好用的框架。记得很多年前读过《黑客与画家》,里面有推荐过最好学java+python两门语言,一个重武器,做工程化的。一个轻武器,方便做些脚本类的。python语法简单容易上手,也看到现在儿童编程培训,也首先教python,不比我们之前入门语言c。指针的概念就要很小心用。类型校验也不是强类型。但没有括号的缩进,一大段很不好分辨,对我个人而言,还是像脚本语言,类似javascript的感觉。2. Java
在大型企业级后台(尤其是金融、电商)中占据统治地位。spring,apache的生态足够稳定。在中国,阿里巴巴的功劳不小,不少人分享电商的场景。这几年给人感觉人到中年一般,一直比较中庸,特别适合大型工程化,会的人多,框架也稳定,属于同质化严重的语言。3. C#
功能场景适用于java,但和java的地位没法比,微软出品,生态上就没有开源的生态,主要还是围绕windows上,做开发。学校教这门语言的时候,觉得可拖拽生成windows界面,比Java原生界面方便好多。当然,现在看有很多办法生成windows软件的界面,同时java原生界面组件也早已过时。4. Go
并发强,能开出用户态协程,而非操作系统原生线程,初始栈大小仅2KB,创建/销毁、上下文切换的开销极,单机可轻松创建十万/百万级Goroutine,不会造成内存溢出。很多java会因为jvm的关系,自然切换到go或者scala,追求新鲜可以,但是上生产,还是要慎重。这个语言强项在并发,如果业务要低消耗机器资源,流量又大的,比如中间件/游戏就特别适合。适合改造一部分计算高的业务模块。5. Elixir :
既能做到极高的并发,一台服务器支撑百万连接。高频社交或即时通讯。没深入研究,只知道是一种新框架,估计只有新锐小公司会是先锋用户,大公司同样的痛点,优先会用go。6. Rust :
内存的设计真的很亮眼,完全是用后即毁,最接近c++。要做一些windows等底层api操作,天然适配。以上几种偏服务端语言,生成前端的框架,如果不是历史包袱,都不建议用,用下面即将介绍的语言,更有优势,灵活又美观。7. JavaScript/TypeScript:
一个是爹,一个是生的儿子,统治着前端开发。浏览器内核产生的语言。服务端:Node.js/Bun:运行时服务端框架,Node.js依然稳固,Bun异军突起前端:React 国外占有率极高。Vue中国市场普及率与 React 旗鼓相当,甚至在中小企业中更高。全栈框架:Next.js vs. Nuxt.js ,属于React vs. Vue 之争的延续移动端:React Native或Flutter,多端合一。国外用的多。小程序:Uni-app,因为你必须支持微信小程序,鸿蒙快应用之类的小程序。国内用的多,做小程序是很难绕开的选择。8. PHP
框架:Laravel是目前全球最成熟的Web框架之一。Livewire允许你直接在PHP类中编写交互逻辑,自动同步到前端。jsp产生过阴影,这种页面嵌入逻辑,没有尝试的动力。国内应该用的不多,现在建站,上面提到的js好框架太多了。9. Lisp
最后还想起来的一个高端语言,行业大牛写文章,露两手的代码语言。我没有使用,也没有学习过,属于声名在外,估计智商180以上的人用我个人觉得JavaScript/TypeScript是全栈利器,发展很快,适合中小型快速启动的业务。python适合做爬虫或ai应用相关的业务,这部分的生态成熟。go,rust做性能高要求的业务。rust还可以当c++替代品,做些和底层系统相关的业务。java,做大工程,属于老牌认证,好补充人,生态成熟,目前依然坚挺。
有ai,还要学编程语言吗?
如果没有基础语法,ai生成的代码,将无法自行判断对错。ai生成的代码不能运行,自然可以继续vibe code,但是生成可以运行的代码,逻辑是错误,你无法识别,是不是更危险。另外,无法进行任何代码微调,vibe code搞来搞去总是修不好,有没有过这种很麻烦的经历,感觉不如自己手动改下代码。ai能帮开发者使用更多不同的语言,降低使用门槛。大量编码的活给ai做,组合不同的编程工具,开发者只需要判断采纳,效率将更高。
一些伪代码片段
// rust内存释放自动且迅速,根本不给开发人员机会泄露内存{// 在声明以前,变量 s 无效let s = "runoob";// 这里是变量 s 的可用范围}// 变量范围已经结束,变量 s 无效
// rust 操作windows api可以打包成exe文件usestd::thread;usewindows::Win32::Foundation::*;usewindows::Win32::Storage::NamedPipes::*;usewindows::Win32::System::IO::*;// 服务端实现fnrun_server() -> Result<(), String> {constPIPE_NAME: &str = "\\\\.\\pipe\\RustWindowsIPC";// 1. 创建命名管道(底层Windows API调用) let pipe_handle = unsafe {CreateNamedPipeW( PIPE_NAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,4096,4096,5000, None, ) };if pipe_handle == INVALID_HANDLE_VALUE {return Err(format!("创建管道失败,错误码:{:?}", unsafe { GetLastError() } )); } println!("服务端:管道创建成功,等待客户端连接...");// 2. 等待客户端连接// 3. 读取客户端数据Ok(())}
# python爬虫场景,同样是解析和清洗数据,代码少。# pandas# 5. 过滤无效数据(比如评分=0的异常数据) df = pd.read_csv("raw.csv", encoding="utf-8") df = df[df["rating"] > 0]# beautifulsoup4item.find("span", class_="rating_num")
// go启动一个并发任务,简洁同时节约机器资源package mainimport ( "fmt" "time")func sayHello() { for i := 0; i < 5; i++ { fmt.Println("Hello") time.Sleep(100 * time.Millisecond) }}func main() { go sayHello() // 启动 Goroutine for i := 0; i < 5; i++ { fmt.Println("Main") time.Sleep(100 * time.Millisecond) }}