各位好。这是我的第一个主题,听闻 V2EX 是中文互联网中技术人士的聚集地,所以就来了。
情况是这样的……本人的专业是音乐,现在主要是在帮家里忙生意,另外搞搞乐队,并没有技术背景。想要学习编程,是出于个人兴趣,我主要想通过学习编程实现下面的一些目的:
- 能自己写一些跨平台、主要供自己和小圈子使用的自动化小工具(有一些想弄成带 GUI 的)和爬虫,主要用来批量整理音视频文件的 metadata(比如用同一格式标准来改写古典音乐唱片里的曲目命名)、更新及归档自己订阅的富文本内容、管理模拟器游戏的存档及 mod 等;
- 实现一些关于音频创作和电子乐器演奏的高级应用,例如模块合成器编程与音频可视化;
- 能够参与甚至创立帮助网民维护自己数字权利(如线上隐私)、对抗消费主义与互联网大企业无底线行为的开源项目,如反消费主义&网购辅助浏览器插件的开发、反追踪工具(如手机权限控制、偷窥隐私的 telemetry data 阻断、浏览器帆布指纹识别阻断)的开发、匿名工具的开发等;
- 想和朋友尝试制作一些独立小游戏(包括但不限于用 RPG Maker 等平台),以及做一个定制化的 RetroArch。
我目前具备的一些基础和不足之处如下:
- 英语海星,翻译过乐器说明书和欧美网文,泡 Reddit,基本可以看懂各种说明文档;
- 由于是艺术生,所以高中后数学就没继续学了,通过线上课程学过一点微积分,不知道学编程会不会需要啃线性代数和数理统计,感觉自己有点虚;
- (可能没什么用)由于自己玩 NAS 什么的,所以懂一点二把刀计算机网络,大概软考网络管理员水平吧;
- 目前是在用 macOS 的 Automator 来实现一些自己的批处理任务,有的时候用 AppleScript 编辑器和 CMD/PowerShell 脚本连查文档带拼凑也能达到一些目的,但是不知其所以然;
- 初中参加过 NOIP 普及组比赛,是用的坑爹的 Pascal 语言,完全没获得什么奖,语法也忘完了,现在大概还能用自然语言勉强说说二叉树、堆栈、冒泡排序之类的大概是什么东西;
- (可能没什么用)会 Markdown 和维基语法;
- 通过啃文档能使用一些 CLI 工具,比如用 ffmpeg 压视频、给路由器配置 dnsmasq、搭建一些网络服务什么的。
所以……
- 如果想达到上述的实用目的,那我应当用什么编程语言来入门?或者说,哪些语言较为合适?
- 您推荐什么学习材料?如何避免闭门造车?
- 需要学一学数据结构么?
- 如何锻炼自己的「开发者思维」?
- 您还有什么要叮嘱和提醒的地方?