1. 背景
    1. 本文成于2023年, 基于当前的社会形势, 以及笔者自己的工作经验而成.
    2. 笔者的职业是程序员, 有很多人在考虑要不要做程序员, 公司也有很多程序员, 就连程序员自己也会考虑: “程序员到底有没有前途, 要不要转行, 以后怎么发展, 遇到中年危机怎么办” 之类的问题.
    3. 仅以此篇, 简单记录下我的看法, 自我勉励, 也给他人一个参考.
  2. 点题
    1. 本文标题中有2个问题, 笔者以为, 两个问题要分开考虑, 因为即使程序员有前途, 也不意味着我们就应该成为程序员, 不是人人都适合某一个特定职业! 况且追赶热门并不意味着一定能赶上, 仍然是千军万马过独木桥的格局! 反之: 即使程序员没有前途, 也不意味着我们不应该做程序员, 取决于有没有更好的选择, 因时而变, 因势而变, 因己而变, 立足每个人的具体情况具体分析, 做出适合自己的决策.
    2. 这两个问题, 前者唯物, 后者唯心. 前者是对现实形势, 行业特征, 经济政治, 社会发展进程等方面的分析和考虑, 更贴近于唯物主义. 而后者, 则完全取决于用户自己的性格, 家庭背景, 社会关系, 知识/技能体系, 兴趣爱好, 心情好坏(千金难买我愿意)等因素, 更贴近唯心主义.
  3. 唯物分析
    1. 程序员是干什么的
      1. 一言以概之: 程序员是给机器设计指令的, 称之为程序设计人员. 程序就是给机器的指令, 意思是让机器按照你的指令去完成你交代的任务.
      2. 扩展一点看: 现实业务千变万化, 要落实为有效的机器指令, 有的项目非常复杂, 需要成千上万人, 工作好几年都不一定能成功. 为了应对这个复杂性, 提高成功率, 诞生了软件工程. 因此, 程序员也被称为软件工程师. 用工程化手段来推进项目进度, 确保项目质量.
    2. 程序员有前途么
      1. 有!
      2. 依据如下:
    3. 社会发展进程
      1. 已然经历了: 原始社会 > 农业社会 > 工业化社会 > 信息化社会 > 智能化社会. 信息化/智能化的推进落实, 程序员群体是主力大军之一. 因此, 程序员被网络戏称为码农, 当今时代的程序员犹如古代农业社会的农民, 专门生产社会所需的指令代码, 不可或缺, 短时间内不会成为夕阳行业, 不过虽则行业越来越成熟, 竞争会加剧, 素质要求会越来越高.
    4. 经济政治形势
      1. 如今全球都在进行科技竞赛, 各国政府重视科技发展, 政策大力扶持科技创新, 记得小时候政治课本上都写着”科教兴国”. 近年来的科技战争愈演愈烈, 中兴/华为等制裁事件犹在眼前, 科技战犹如领土主权战争, 生死攸关, 其中, 程序员群体还是主力大军之一(软硬件协同, 程序员属于软件部分).
    5. 行业形势
      1. 农业逐渐向大规模农场聚集, 男耕女织的家庭农业社会荡然无存. 工业很发达, 需要大量各工种的工人, 但如今工业也高度依赖信息化产业, 正如前几年流行的”互联网+”, “AI+”, “无纸化”, “自动化”战略, 程序员群体是信息化产业主力大军之一, 有一定的战略纵深. 此外: 像华为, 阿里, 腾讯, 百度, 小米. 苹果, 谷歌, 微软, 甲骨文, 特斯拉等科技企业如日中天, 耳熟能详, 各种科技创新公司如雨后春笋, 琳琅满目, 程序员群体也是这些企业里的主力大军之一.
    6. 程序员职业生涯
      1. 技术线: 初级程序员/测试员(俗称码农) > 中级 > 高级 > 架构师(初/中/高) > (甚至可以走软硬件协同) > 技术经理/总监 > CTO(首席技术官)/CIO(首席信息官) > CEO(首席执行官).
      2. 管理线: 程序员/测试员 > 项目组长 > 项目经理/产品经理 > 部门经理 > 董事会成员/CEO
      3. 据说, 雷军, 马化腾, 李彦宏, 周鸿祎, 张一鸣, 丁磊, 史玉柱, 张小龙等人, 都是做程序员出道的. 当上CEO赢娶那啥虽是一句戏言, 但也说明这个行当是具有长远发展的可行性的!
  4. 程序员所需的基本素养
    1. 数学基础, 不能一看到数学就头疼
    2. 英语基础, 不能一看到英语就头疼
    3. 计算机/信息技术/数据结构与算法/操作系统/编译原理/网络技术, 软件工程方面的知识
    4. 较强/缜密的逻辑思维能力, 洞察力, 想象力, 团队协作能力, 学习(自我提升)能力
    5. 从善如流: 纳谏能力, 要能广泛吸取其它优秀可用的东西, 不能闭门造车, 盲目自大
    6. 坚持自我: 要有主见, 知道哪些适合借鉴采纳, 哪些不适合. 众多方案各有优劣要能够从容选择, 果敢实践. 外界干扰诱惑众多, 要有我行我素的气魄.(这一条看似与上一条相反, 实则不然, 阴阳相辅, 缺一不可)
    7. 要做好程序员的话, 综合素质要求还挺高.
    8. 其它能力欢迎补充
  5. 唯心分析
    1. 性格
      1. 要偏静, 或动静结合, 偏动的话恐怕不太适合. 有的人坐不住, 一会儿不找人热闹热闹就浑身不自在, 就算呆在这里也身在曹营心在汉, 这种性格不适合. 程序员经常需要长时间沉静下来研究方案, 排查问题. 要能够与机器打交道.
      2. 要坐而言不如起而行. 要勇于实践/探索, 敢于尝试, 敢于犯错, 敢于担责, 对新技术新方案感兴趣, 乐于尝试.
      3. 要具备主动性. 那种别人推一下走一步, 自己不会发现战机并发动战斗, 拿下胜利的也不太合适.
      4. 要能开放协作, 尊重科学规律和现象. 有的人疑神疑鬼, 又不去设计具体方案来排查落实, 只顾着胡思乱想, 甩锅推责, 错误都是别人的, 功劳都是自己的. 遇到问题自己闷着, 不知道/不愿意汇报的, 新的协作方案变更不愿意优化不愿意拥抱变化一根筋的, 这些类型不适合. 要能够与人打交道.
      5. 要有主见. 虽然甩锅推责不可取, 但要能机敏的判别责任属于谁的, 谁对谁错要能判断, 不怕得罪人, 不做背锅侠, 有的人你不怼得ta无言以对ta就得寸进尺. 技术上更需要有主见, 否则浩如烟海的技术栈就能耗尽人的心力, 弱水三千独取一瓢.
      6. 以上只是笔者个人经验之谈, 也不是绝对的, 只是要成为程序员并有所建树最好具备这些特征.
      7. 其它性格欢迎补充
    2. 知识体系&兴趣爱好
      1. 笔者一直认为: 面对就业困难, 最好根据自己的兴趣爱好做选择, 其次是技能特长, 最后是实践验证排查. 尝试一下如果感到恶心不感兴趣就难以上手. (我尝试前端css的时候就恶心, 所以选择后端)
      2. 正如本文第4节所示, 程序员需要一些基础知识, 有的人对英语/数学/计算机/信息技术/数据结构与算法/操作系统/编译原理/网络技术/软件工程等科目反感, 一看到就头疼的不适合
      3. 如今社会上, 科技企业对于学历要求越来越高, 一些名不见经传的企业可能都要求211本科起步, 所以如果学历太低, 又不能提升学历, 又没有关系可以走的, 也会缺乏竞争力, 做这个行当进展会更困难. (企业招聘时都会标注学历门槛, 能力特别强/面试情况好的有几率可以谈, 稍微放宽学历要求)
    3. 家族/社会关系
      1. 如果家族中, 或者周围认识的人, 有做程序员发展不错的, 并且自己并没有明确的择业方向, 面临择业困难的, 且不反感程序员所需科目的, 那可以尝试尝试, 反正不知道干啥, 尝试总不会吃亏. 不断尝试, 分析, 总结, 进而找到适合自己的方向.
      2. 如果有认识关系好的程序员, 则可以获取更多帮助和引导, 事半功倍. 在就业进公司方面也更容易, 且容易形成报团取暖的格局.
      3. 女生做程序员, 在就业时稍微占点优势(虽然都说男女平等, 但物以稀为贵, 同等条件下说不定有的领导更愿意招女生. 以前有遇到公司里有女生技术一般般, 又不愿意积极干活都被招进来的, 不提倡这种…)
    4. 心情
      1. 很多时候, 并不是走投无路, 其实有很多方案都可以实施, 但是实际情况却是一团乱麻, 为什么? 因为人, 方案是通过人实施的, 如果人有抵触心理, 不愿意落实实施, 你再好的方案都是空谈! 所以, 没办法的办法就是好办法, 能够让大家都认可并实施的方案就是好方案, 哪怕它本身并不是最好的.
      2. 如果你就算满足上面提到的各种素质和条件, 但你就是心里不高兴, 就是瞧不上程序员, 那完全没必要强迫自己.
      3. 如果你的确举棋不定, 说不定抛色子, 转铅笔, 抛橡皮, 丢硬币, 随机选一个都行, 反正比原地踏步强. 就算最后证明这一个不合适, 那也积累了实践经验, 并且排除了一个错误选项, 离正确选项又进了一步, 回头看也是一个重大的进步.
  6. 参考文章
    1. ( 程序员工作只能做到 35 岁吗?之后的路是怎么走的呢? – 知乎 (zhihu.com)
    2. (IT行业岗位及发展方向大全? – 知乎 (zhihu.com)