V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shinsekai
V2EX  ›  程序员

只会“单文件编程”,应该如何提升能力?

  •  
  •   shinsekai · 292 天前 · 3759 次点击
    这是一个创建于 292 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每次遇到一个课题,看看输入是啥,想要得到什么输出,然后开始新建一个文本文档用 python 或 matlab 开始编。函数和类基本都放在一个文件里,当然有些另找的函数就直接放在同一文件夹下也没什么问题。内容无非是各种矩阵运算,调用各种库,最后点击运行。期间加断点看中间变量的值是否正确,然后画图看结果。时间久了,很多库都熟练了,课题也解决了,但总感觉:

    这样的编程脱离实际,没法挣钱,请问有什么好的方法和教程?

    25 条回复    2023-06-12 14:12:30 +08:00
    cmdOptionKana
        1
    cmdOptionKana  
       292 天前
    学前端, 学运营.
    imicksoft
        2
    imicksoft  
       292 天前   ❤️ 4
    1.模仿别人
    2.做自己想要的
    harrozze
        3
    harrozze  
       292 天前
    @imicksoft #2 赞同。找一些开源代码库看看怎么组织代码的;如果遇到跨目录不好导入的,就 google 一下看看。跳出来具体问题的话,OP 用 matlab 编程……似乎不是软件专业的(我毕业的时候还没这东西,所以不确定)?想在程序方面发展一下的话,可以看看编程思想相关的,比如模块化编程,但是先别着急去看设计模式那些东西,距离太远,即使能跳的过去,中间也会缺失一些思考的过程,走不远。
    DTCPSS
        4
    DTCPSS  
       292 天前   ❤️ 2
    其实如果你要解决的问题本身就很比较单纯+面向过程的话,单文件也不是不可以
    如果多个文件用到同一段逻辑,那就提取出来放在一个公共文件里
    westoy
        5
    westoy  
       292 天前
    拆分项目都是工程领域的被项目毒打出来的实践经验

    你搞数据、图形这种的又不太需要这方面能力, 一般能写出来就行了
    RRRSSS
        6
    RRRSSS  
       292 天前
    我觉得搞数据分析不就是一次性代码吗,你这样没什么问题吧
    shyangs
        7
    shyangs  
       291 天前   ❤️ 1
    用到 matlab ,是數學系?

    數學系 code 寫的漂不漂亮不重要。因為你的課題和論文不會年復一年的維護。
    shyangs
        8
    shyangs  
       291 天前
    除非你要從學術界跳業界。業界有大規模合作的要求,要求每個人都寫出同樣風格的代碼,方便維護。
    xuanbg
        9
    xuanbg  
       291 天前
    没有规模以上,代码随便。能运行,能达到目的就行。说不好听点,OP 的代码也就是自动化脚本而已,不需要什么如何组织。压根不存在这个需求啊。
    zictos
        10
    zictos  
       291 天前
    项目太复杂的话你自然不会写成单文件了,因为会很晕,写的时候和后期维护都会一个头两个大。
    代码不是特别多的话确实是单文件最简单和直接,非得弄很多文件反倒还复杂化了。
    streamrx
        11
    streamrx  
       291 天前 via iPhone
    你做的东西跟软件工程都不是一个东西
    AyaseEri
        12
    AyaseEri  
       291 天前
    大规模应用一般不止一个输入输出,所以自然而然就会拆出许多分类了。
    而且啊,学会拆文件、拆文件夹,你已经是架构师了
    YaakovZiv
        13
    YaakovZiv  
       291 天前
    我自己是先运行再优化。有些经验会成为个人习惯。
    LykorisR
        14
    LykorisR  
       291 天前
    工程能力是需要训练的,跟着开源项目做学呗,感觉也没啥好的办法
    RockShake
        15
    RockShake  
       291 天前 via Android
    科研跟工程是两种不同的组织方式,工程项目组织更多考虑代码的可读性,可维护性,可复用性,你更偏重解决单一问题。当你的单一问题变成复杂的系统问题的时候,你的代码自然也会形成对应的组织形式。
    Tanix2
        16
    Tanix2  
       291 天前 via iPhone
    能解决问题就行了
    linearxian
        17
    linearxian  
       291 天前
    用 python 科研,我是把反复会用的基础功能写成 function 然后整理在一起。具体到每次实验都是开新的 jupyter notebook 。最后跑通了如果计算量大或者处理的数据多会整合一个版本上传到服务器跑。
    janus77
        18
    janus77  
       291 天前   ❤️ 1
    找个工程化做的比较好甚至比较偏激的语言去学习他的做法,比如 java
    学会了以后找工作顺便还能多个亮点(狗头)
    realpg
        19
    realpg  
       291 天前
    随便找个你会语言的比较大型的开源项目

    然后自己随便编点需求,在他基础上加简单功能
    功能不一定有用,自己瞎鸡儿创造需求就是了

    加过几个功能,基本就知道它怎么组织的了
    dayeye2006199
        20
    dayeye2006199  
       291 天前
    你不是说你用一些库好熟练么,这些库要是开源的,研究研究这些库怎么写的,不也是挺好的学习教材么
    sorcerer
        21
    sorcerer  
       291 天前 via Android
    缺乏面向对象编程能力。。
    zgk
        22
    zgk  
       291 天前   ❤️ 1
    我理解这里目标主要是一个复杂度的控制。

    大概是,当代码逻辑变得复杂,认知负担逐渐加重的情况下,怎么去设计抽象去隔离复杂度,拆分代码,减小认知的负担吧。然后拆文件、文件夹只是手段的小部分,类似拆函数、对象封装等等都是在做类似的事情,进一步衍生出各种各样不同的设计模式、方法啥的。

    如果只是单纯处理输入和输出,一次性任务的方面,通常不会太复杂。涉及到网络、GUI 等涉及到更多运行时、操作系统能力的时候,确实就需要考虑复杂度的控制方面的东西了。

    可以试着搞些大点的项目,比如说给你的课题脚本整点 UI 界面啥的(推荐试试前端技术 hhh )
    WestXu
        23
    WestXu  
       290 天前
    缺的是一个专业领域的知识,这个领域叫做软件工程
    xyjincan
        24
    xyjincan  
       290 天前
    我觉得多看看领域内一些源码,看看典型项目
    InvincibleDream
        25
    InvincibleDream  
       290 天前
    当有功能复用需求的时候就可以考虑把功能独立出来作为自己的依赖库,如果都是针对不同问题的脚本,采用“单文件编程”也没什么不妥。还有一种就是工程内容过多,单文件开发、优化造成困难,也需要分成多个文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3890 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:30 · PVG 18:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.