程序设计的基础方法(发刊词) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Braisdom
V2EX    程序员

程序设计的基础方法(发刊词)

  •  
  •   Braisdom
    braisdom 2020 年 12 月 25 日 2110 次点击
    这是一个创建于 1848 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前面也有过讨论,本次正式发布,保持每周更新一篇: t/736407

    将文章写短,节约读者的时间,而不是彰显作者专业度。通过简短、浅显的代码示例,讲解抽象且复杂编程模型,而不是掺杂大量术语或单词缩写。以客观程序的事实为基础,而不是过分表达个人主观理论,上述是我写这一系列文章的基本宗旨。当然,写文章和写代码一样,也需要不断的迭代和版本更新,同时也需要根据读者反馈调整一些文字的描述和框架结构,从而形成一套基础编程的方法体系,而不是对现有有理论或框架技术应用的解释。透过现象看本质,通过对基础编程方法的学习,掌握基本的技术发展规律和趋势,形成自身看软件编程世界独特的方法。

    理解概念、灵活运用是一个层次,但发现背后遵循的规律是一个更高的层次。学习理论的结果是一个层次,学习理论背后的原理和发展的过程是一个更高的层次。学校老师或书籍教导我们的更多是结果,很少谈及“为什么?”,本系列有一个副标题“凡事就怕问为什么?”,这是本系列的主要线索,探寻更多“为什么”。

    现实中,我们能够找到的编程知识,大多数告诉你:是什么?如何用?却不告诉你为什么?“怎么用”,“如何用”是表象,不同人有不同的理解,也会形成自身的理论体系。但不同人之间总是使用同样的方式解决问题,尤其是一些优秀的项目,潜在遵循的规律是什么?这是一个值得去深究的课题。

    经济学提供了一种客观分析的视角,一套方法论体系,一种以边际为主的分析方法,以研究人类的活动和发展规律为主要线索。在程序设计领域,更多是偏主观的理论,总是带着强烈的个人色彩。虽然有价值,但同时也拉长了基础编程的学习路径。尤其是初学者,看到繁多的技术理论更是无从下手,这也就是我写这一系列文章的初始动力,通过哲学式的思辨,讨论程序设计中的各种元素背后所遵循的规律,以浅显的语言描述,简单直白代码示例讲解背后的原理。虽然有个人主观的认知,但更多是基于开源项目的代码总结的规律。

    软件编程的历史并不长,理论体系的发展却很多,所谓的编程方法类的书籍,更多是讲各种编程语言的特性和语法,一本书里代码比概念的阐述还要多。再就是讲解流行的框架技术或软件工程理论,通过这类书籍的学习可以快速进入工作状态,也能在面试的过程中顺利通过,这只是基础工具应用的学习。而真正要写好每一行代码,是在进入不同公司后,学习特定领域下的编程范式,更确切的说是符合某个个人编程理论倾向,缺乏程序设计方法相对客观的认知,同时也会局限于当前的编程模型,久而久之,形成固有的思维方式,却忽视了背后存在的原理,即使写了很长时间的代码,灵活运用了各种工具,但对软件技术和理论的创新,显得力不从心,用一名常见的古文来表达:“事要知其所以然”来表达最为恰当。掌握内存的逻辑和背后的规律,才能对现有的技术提出挑战,创造出符合软件发展规律的项目或产品。

    其实,所谓背后的原理和规律,是前人在一次次惨痛的 Bug 中积累的经验,是不同程序员在处理类似问题时采用的共性的方法,是软件发展过程中不知不觉演进的方向,“读史可明鉴,知古可鉴今”,同样了解软件的发展过程和最原始的动力,有助于我们更理性的看待今天的发展,更智慧的理解未来的趋势,更重要的是形成自身独特的方法体系,创造更优秀的软件项目。

    第一阶段 Java 基础编程元素的理解

    • 什么时候定义一个 Method ?为什么?
    • 什么时候定义一个 Interface ?为什么?
    • 什么时候定义一个 Exception ?为什么?
    • 什么时候 Catch Exception ?什么时候 Throws Exception ?为什么?
    • RuntimeException 与 Exception 到底有什么区别?
    • 什么时候需要打印日志?为什么?

    个人项目: https://github.com/braisdom/ObjectiveSql

    同时本人正在求职,有合适机会的微信联系我:braisdom

    关注微信,及时收到信息,V 站也会发:

    wx

    6 条回复    2020-12-25 21:42:40 +08:00
    Kirsk
        1
    Kirsk  
       2020 年 12 月 25 日 via Android
    不如结合原则来讲解 更能体现怎么去做设计 什么样的写法符合原则(不是教条) solid kiss 等 或者一套方法论
    Braisdom
        2
    Braisdom  
    OP
       2020 年 12 月 25 日
    @Kirsk 原则往往比较空洞,而且原则很难适用于多变的应用系统,需要的是讲解不同人处理同样问题而使用同样的方法,背后遵循的规律。
    Kirsk
        3
    Kirsk  
       2020 年 12 月 25 日 via Android
    @Braisdom 正是因为原则抽象层级高 更值得讲 原则对人和系统都有普适性 什么样的做法符合原则 你后半句讲的就是原则
    Braisdom
        4
    Braisdom  
    OP
       2020 年 12 月 25 日
    @Kirsk 空洞的原则和规律没有太大意义,就像面向对象的基本概念,封装、多态和继承,还有一些抽象的基本原则。太空洞了,看似包含了一切,其实啥也没有。我需要阐述的是具体的,实际的,就像“为什么要定义一个方法”,分析优秀的开源项目,从中找出可以验证的实例,并说明为什么,这些才是有意义的。
    xuanbg
        5
    xuanbg  
       2020 年 12 月 25 日
    程序设计的目的是什么?我认为这一点要先讲清楚。
    Braisdom
        6
    Braisdom  
    OP
       2020 年 12 月 25 日
    @xuanbg 这是一个好问题,但相对宏观一点,属于软件工种类的问题,重要的是先从微观去分析,如何去写好程序。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2722 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:40 PVG 22:40 LAX 06:40 JFK 09:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86