精华内容
下载资源
问答
  • 程序员DD的空间地址

    2020-03-04 09:58:06
  • 最近在跟着程序员DD的Spring boot教程系列学习Spring boot,由于年代原因,Spring boot已经发生了一些变化,所以在这里进行一些补充。 补充的知识大多来自评论区,百度,StackOverFlow 重要提示 阅读本文前请打开...

    最近在跟着程序员DD的Spring boot教程系列学习Spring boot,由于年代原因,Spring boot已经发生了一些变化,所以在这里进行一些补充。

    补充的知识大多来自评论区,百度,StackOverFlow

    重要提示

    阅读本文前请打开程序员DD的Spring boot教程系列

    Spring Boot快速入门

    1. 如果你使用Intellij-idea的话,可以直接通过File-New-Project-Spring Initializr 操作新建项目,会比导入从网站生成的Maven demo更加快捷。
    2. 在Spring mvc的@RequestMapping标签中,可以不添加/,Spring mvc会帮助你默认添加。
    3. 当前的Spring mvc中,出于支持REST的需求,形如@RequestMapping(method="RequestMapping.GET")标签可以简单替换成@GetMapping标签,POST,PUT,DELETE操作同理。
    4. 单元测试文档中,形如
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringApplicationConfiguration(classes = MockServletContext.class)
    @WebAppConfiguration

    的类标签,需要替换成如下:

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest

    Spring Boot开发Web应用

    这里问题不多,只有一个,原例子中的th标签没有添加xmln引用,通过Alt+Enter自动添加即可。

    Spring Boot工程结构推荐

    没什么问题,没有细分Dao层和Entity层,合并为了Domain层,其实是符合现代开发的。

    Spring Boot构建RESTful API与单元测试

    这里本身没有问题,需要注意的是,此处的对象是通过HTTP头添加的,也就是基于POST方法直接添加到ModelMap中,此处的测试也是通过这样的形式测试,而下一篇内容的相似代码在这里产生了区别。

    Spring Boot中使用Swagger2构建强大的RESTful API文档

    重点

    对于Swagger2的使用,程序员DD大大提供了一种更优雅的方法,请参考这篇:

    简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽

    使用非常简单,通过yml统一配置也更加方便一些。这个配置方式集成了swagger2和swagger-ui。

    这篇中格式相关内容有一些欠缺,这里详细说一些。

    1. 对于Swagger2文档里的@ApiImplicitParam属性,里面的内容如果是一个uri变量,那么应该加上paramType=path,才能正确识别。
    2. dataType是一个必须要加的属性,加了这个才能正确显示。
    3. 如果变量比较简单,其实默认生成的文档已经很强大了。不过最好还是手写@ApiOperation属性。
    4. Swagger2的配置文件中.apis(RequestHandlerSelectors.basePackage("com.didispace.web"))需要改为自己的包名,另外,contact()方法在新版本中已经改为了新形式,请注意改动。
    5. 本篇中,对象是通过Body添加的,对应的测试方法也要改变,原测试方法中
    request = post("/users/") 
                    .param("id", "1") 
                    .param("name", "测试大师") 
                    .param("age", "20"); 

    改为

    request = post("/users/").contentType(MediaType.APPLICATION_JSON).content("{\"id\":1,\"name\":\"测试大师\",\"age\":20}");

    其他地方也类似。

    1. 即使不使用swagger-ui库,我们也可以到处为json版本,访问/v2/api-docs就能获取json版本,并且,可以用postman导入该api,进行测试非常方便。

    Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅

    @Query("from User u where u.name=:name")

    需要改成

    @Query("select u from User u where u.name=:name")
    spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop

    create-drop策略测试用用就好,一般选择update策略

    1. 该篇中没设置hibernate的方言,这是必须要设置的
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

    Spring Boot中使用Redis数据库

    1. 本文中Redis配置均为Spring boot给的默认配置,所以没有特殊改动根本不用写。
    2. Redis的工厂类RedisConfig,Spring boot有提供默认值,不用写。
    3. 如果你用的Redis版本大于2.8,那么Redis已经支持了类似jpa的Reporsity方式,不需要像文中一样麻烦。当需要管理自己的组件时,可以使用Redis提供的标签。
      这里举例:

    User类

    @RedisHash("user")
    public class User{
        @Id
        private Long id;
        private String name;
        private Integer age;
    
        //构造函数(空参数和name,age双参数),访问器略
    }

    只要在类上添加好RedisHash标签,并在key上添加Spring的Id标签,即可。

    UserRedisRepository类

    public interface UserRedisRepository extends CrudRepository<User,Long> {
    
    }

    和jpa的Repository类类似,该接口实现了CRUD操作,并尽可能多的实现了各种查询方式,对于NoSQL而言,这基本满足了所有的需求,毕竟又不支持关系数据库的复杂功能。如果需要自定义,就要实现这个接口自己去写了,写法可以直接参考文档。

    可以测试一下

    RedisTests类

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest
    public class RedisTests {
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
        @Autowired
        private UserRedisRepository userRedisRepository;
        @Test
        public void testStringRedis() throws Exception{
            stringRedisTemplate.opsForValue().set("Cielo","Good Boy");
            Assert.assertEquals("Good Boy",stringRedisTemplate.opsForValue().get("Cielo"));
        }
        @Test
        public void testObjectRedis() throws Exception{
            User user=new User("Cielo",20);
            user.setId(1l);
            userRedisRepository.save(user);
            Assert.assertEquals(user.getName(),userRedisRepository.findOne(1l).getName());
        }
    }

    这个类测试了spring提供的string类型RedisTemplate和我们自定义的userRedisReposity。

    中间多篇幅没有问题,略过。

    需要注意的是,如果Redis和Hibernate的Repository同时作用于一个实体上时,会产生错误导致Hibernate的Repository不可用。

    以及,Redis在Spring中和jpa一样支持事务,只要在相应方法上加上事务标记即可。

    Spring boot中使用log4j记录日志

    log4j已经旧了,而且Spring-boot原生集成了logback,后续将在此处补充logback配置信息。

    Spring Boot中使用AOP统一处理Web请求日志

    Spring的最主要特性之一,终于和大家见面了。

    在写这篇的补充前,希望大家能理解其中一些写法的意思,DD给出的比较基础了,但是还不够全面。

    这篇可以看看Spring之AOP注解配置详解

    以及,aop是基于Spring的扫描去工作的而不是Spring-mvc,因此同时使用aop和web时,需要在pom.xml中先引入aop包才可以。这里简直大坑。

    最后,关于aop的一些用途,可以看看这个例子:

    使用AOP 实现Redis缓存注解,支持SPEL

    Spring Boot中的事务管理

    这里面有一个问题,DD大大对@Rollback这个注解没有详细说明,我在评论里看到几个网友都表示有疑问,我自己研究了下,在评论里进行了回复,也贴到这里:

    实际上,@Rollback标签是需要配合@Transcational标签共同使用的,你可以理解为在Junit下对于加了Transactional标签的方法,会默认视为@Rollback(true),如果让这个方法不回滚,那么就要手动设置@Rollback(false)

    转载于:https://www.cnblogs.com/cielosun/p/7308324.html

    展开全文
  • 点击上方 "程序员小乐"关注,星标或置顶一起成长每天凌晨00点00分,第一时间与你相约每日英文Anyone else have no right to judge y...

    点击上方 "程序员小乐"关注, 星标或置顶一起成长

    每天凌晨00点00分, 第一时间与你相约

    每日英文

    Anyone else have no right to judge you, they may have heard things, but they feel less than what you experienced.

    谁都无权评判你,他们也许听过你的事情,但他 们感受不到你所经历的一切 。

    每日掏心

    人生的舞台上,生活可以成就一些人,但是,生活也可以打败一些人,关键是看你如何去对待它。

    来自:兔子托尼啊 | 责编:乐乐

    链接:zhuanlan.zhihu.com/p/101150248

    程序员小乐(ID:study_tech)第 755 次推文   图片来自 Pexels

    往日回顾:今日头条技术架构分析,看这篇就对了!

       正文   

    写这篇博文是记录下跨年的bug。

    去年隔壁组的小伙伴就是计算两个日期之间间隔的天数,因为跨年的原因计算有误。

    当时测试组的小姐姐也没有模拟出来这种场景,导致上生产环境直接影响线上的数据。

    今天逛技术论论坛正好遇到Java日期的操作bug。

    1 yyyy 和 YYYY

    别看字,看代码

    @Test
    public void testWeekBasedYear() {
      Calendar calendar = Calendar.getInstance();
      // 2019-12-31
      calendar.set(2019, Calendar.DECEMBER, 31);
      Date strDate1 = calendar.getTime();
      // 2020-01-01
      calendar.set(2020, Calendar.JANUARY, 1);
      Date strDate2 = calendar.getTime();
      // 大写 YYYY
      SimpleDateFormat formatYYYY = new SimpleDateFormat("YYYY/MM/dd");
      System.out.println("2019-12-31 转 YYYY/MM/dd 格式: " + formatYYYY.format(strDate1));
      System.out.println("2020-01-01 转 YYYY/MM/dd 格式: " + formatYYYY.format(strDate2));
      // 小写 YYYY
      SimpleDateFormat formatyyyy = new SimpleDateFormat("yyyy/MM/dd");
      System.out.println("2019-12-31 转 yyyy/MM/dd 格式: " + formatyyyy.format(strDate1));
      System.out.println("2020-01-01 转 yyyy/MM/dd 格式: " + formatyyyy.format(strDate2));
    }

    输出结果:

    
    
    2019-12-31 转 YYYY/MM/dd 格式: 2020/12/31
    2020-01-01 转 YYYY/MM/dd 格式: 2020/01/01
    2019-12-31 转 yyyy/MM/dd 格式: 2019/12/31
    2020-01-01 转 yyyy/MM/dd 格式: 2020/01/01
    
    
    
    

    细心的同学应该发现了2019-12-31YYYY/MM/dd 此刻变成了2020/12/31

    ??为何呢?

    YYYY这么大的能耐,能跑到2020年代去?

    我2019年底买的东西,你如果用YYYY来格式化出库日期,我是不是得到2020年底才能收到货?此bug问题挺大的呀!

    YYYY 到底是何方妖怪?????

    Java's DateTimeFormatter pattern "YYYY" gives you the week-based-year, (by default, ISO-8601 standard) the year of the Thursday of that week.

    例子:

    下面就是用YYYY格式化代码

    • 12/29/2019 将会格式化到2019年 这一周还属于2019年

    • 12/30/2019 将会格式化到2020年 这一周已经属于2020年

    看字说话YYYY,week-based year 是 ISO 8601 规定的。

    2019-12-31号这一天,安周算年份已经属于2020年了,格式化之后就变成2020年,后面的月份日期不变。

    2 dd 和 DD

    private static void tryit(int Y, int M, int D, String pat) {
      DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pat);
      LocalDate dat = LocalDate.of(Y,M,D);
      String str = fmt.format(dat);
      System.out.printf("Y=%04d M=%02d D=%02d " +
        "formatted with " +
        "\"%s\" -> %s\n",Y,M,D,pat,str);
    }
    public static void main(String[] args){
      tryit(2020,01,20,"MM/DD/YYYY");
      tryit(2020,01,21,"DD/MM/YYYY");
      tryit(2020,01,22,"YYYY-MM-DD");
      tryit(2020,03,17,"MM/DD/YYYY");
      tryit(2020,03,18,"DD/MM/YYYY");
      tryit(2020,03,19,"YYYY-MM-DD");
    }

    输出结果:

    Y=2020 M=01 D=20 formatted with "MM/DD/YYYY" -> 01/20/2020
    Y=2020 M=01 D=21 formatted with "DD/MM/YYYY" -> 21/01/2020
    Y=2020 M=01 D=22 formatted with "YYYY-MM-DD" -> 2020-01-22
    Y=2020 M=03 D=17 formatted with "MM/DD/YYYY" -> 03/77/2020
    Y=2020 M=03 D=18 formatted with "DD/MM/YYYY" -> 78/03/2020
    Y=2020 M=03 D=19 formatted with "YYYY-MM-DD" -> 2020-03-79
    

    看到没有?

    最后的3个日期都错误了,这里的大写的DD代表的是处于这一年中那一天,不是处于这个月的那一天。

    小伙伴们一定要记住了不要犯类似的错误。

    3、结论

    YYYY和yyyy不一样的,DD和dd也是不一样要切记。

    此锅我们不背。

    欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。

    欢迎各位读者加入程序员小乐技术群,在公众号后台回复“加群”或者“学习”即可。

    猜你还想看

    阿里、腾讯、百度、华为、京东最新面试题汇集

    Java中关于try、catch、finally中的细节分析,看了都说好!

    你不知道的Java内部类

    Spring怎么在一个事务中开启另一个事务

    关注「程序员小乐」,收看更多精彩内容
    

    嘿,你在看吗

    展开全文
  • 主要介绍了YYYY-MM-dd的实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 其他职业越老越值钱,程序员越老越贬值?

    万次阅读 多人点赞 2020-11-24 08:31:00
    点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!前言今天一早,看到NBA交易消息中提到:小加索尔与洛杉矶湖人队签下两年老将底薪合同。业界评论一致认为湖人这...

    前言

     

    今天一早,看到NBA交易消息中提到:小加索尔与洛杉矶湖人队签下两年老将底薪合同。业界评论一致认为湖人这次在中锋这个位置进行了补强,甚至有人认为湖人是捡了个大便宜。

    小加索尔作为一个85年出生的球员,在NBA赛场上已经是处于职业生涯晚期的球员,为什么还这么受关注呢?其实每年NBA交易期都会有这样类似的情况,一些早已功成名就的老将,不在意薪水的多少,只想加入一只有争冠实力的球队,并且往往他们的经验会让球队受益匪浅,关键时刻往往会帮助球队获得胜利。正如我们华夏民族一直流转的那句“家有一老,如有一宝”。

    每一个职业每一个行当,一代代的经验传承,造就了中华民族五千年的文化荟萃,但是现在似乎程序员这个职业有些另类,别的职业都是越老越值钱,唯独程序员,在众人的眼中越老越容易失业?越老越贬值?

    那究竟是什么原因造成了这个现象呢?让我们一起看看知友们都是怎么说的吧

    田林哥哥的意见(以下推荐整理自:https://www.zhihu.com/question/378192972/answer/1587409032)

    做程序员这些年,我一直在思考一个问题,就是:

    就互联网公司而言,对于公司好的发展逻辑其实是跟对于个人来说好的发展逻辑似乎是有冲突的。

    对于一个大公司来说,一个新员工进来,首先要做的是什么?

    学习遵守公司的流程规范,让自己的工作内容和工作方式都以一种标准化的方式进行。

    哪怕你做了某个很好用的工具,或者发现了做这件事的更高效的方法。

    那么在得到上级认可之后,你要干什么?

    把这个东西整理成标准的流程,文档,以提高后面新入职的同事的工作效率。

    为的是什么?

    为的是哪怕有一天你不在这个公司了,你所做的这一部分工作也能很快地找到另外一个人来代替。

    当然,然后还有进行项目开发时对于代码和文档的各种规范和要求,越是大公司,在这方面的要求越是严格。

    为的是什么?

    为的是哪怕你作为这个项目的核心开发者,但是如果有一天你主动离职了,或者年龄大了被公司裁了,这个项目依旧可以正常地运行迭代下去。

    这确实是对于公司发展来说最好的逻辑。

    但是问题是,这对我们作为员工的个人来说,可能并不是一个好的逻辑。

    如果一个公司想要做大,想要走的远,那么他们就需要通过标准化,规范化的流程来把个人因素变动所带来的的影响降到最低。

    而在里面作为的螺丝钉的程序员,除了写代码完成业务功能以外,还要把代码写的尽量让大家都能看懂,让后来人能轻易接手。

    但这也为他后续被更年轻,更能996的程序员取而代之,埋下了伏笔。

    而在某些传统行业,则不是这样的。

    尤其是有些老一辈的手艺人,确实是越老越吃香,甚至是一个匠人到了六七十岁,还有人愿意把自家孩子送到这个匠人门下当学徒,学习手艺。

    难道是因为这个行业真的有什么常人难以学会的知识或是技能,哪怕钻研了五六十年,还是有着很大的提升空间。

    以至于研究了50年的手艺人,就真的比研究了30年的,要高好几个档次,所以大家才都青睐那个更老的手艺人吗?

    也不一定。

    也有可能是人家只是有几个压箱底的绝活,但是这个绝活,在这个手艺人临终之前,都不会轻易地交给自己的徒弟,更不要说是新入行的同事了。

    毕竟人家是打算靠这点绝活,吃一辈子饭的,如果随随便便就交给徒弟,那师傅不就饿死了吗?

    所以说,明白了吗?

    为什么有些职业是越老越吃香,而程序员不是越老越吃香?

    因为互联网公司的逻辑是:”虽然我需要程序员来帮我开发软件,但是我更需要的是这个软件离了他之后,依然可以好好地运行,所以说我会竭尽全力地来保证流程的规范化,代码的可读性以及业务逻辑的文档化。“

    这样一来,即使程序员开发出了某个发展很好的项目,但是在这个项目进入稳定生产之后,也跟他没有太大关系了。

    他并不能靠对着某个项目的理解,而吃一辈子饭,因为公司的规范要求他把所有有关这个项目的理解,都整理成文档,模型,和代码注释。

    他要么抓住某个机会成为管理层,拿到公司股份,要么不断跟进学习日新月异的新兴技术,要么,就只能等自己老了,精力和体力都比不过年轻人的时候,被更加年轻的程序员所取代。

    从这个角度上看,公司和程序更像是一个生命,而前赴后继的程序员们,只是不断往这个生命里面注入动力的干电池而已。


    自由飞的想法(以下推荐整理自:https://www.zhihu.com/question/378192972/answer/1351419919)

    大部分的中国企业,就没把程序员当做“脑力劳动者”,而是当做“体力劳动者”在用!

    996是福报啊!过了35岁,搬不动砖了,996都没你的份。

    我以前看报道,说“中国航天”深化改革啥啥啥的,其中一个成果就是“队伍平均年龄28.6(大概吧,总之很年轻)岁”,然后今年火箭已经炸了三次了。——这事我就随口一说,究竟什么原因炸的,炸得好不好,应该不应该,我不是行内人士,大家不用给我上课,实打实的说,我也不关心。

    但以我一个快40的老码农而言,不说别人,就说我自己,我非常肯定确定以及一定:

    我的能力从来没有贬值。恰恰相反,随着经验的积累,我的能力与日俱增。

    我相信,就算不是全部,但很多老码农都会有这种感觉。

    新东西学不动,那是懒得学!工作中用不到的,我学他干嘛?真要学的时候,分分钟捡起来,比你刚入行的菜鸟不知道快多少倍。

    而且会倒腾个新技术就算有能力了?呵呵,

    除了高质量代码生成以外,还有很多其他需要日积月累的技能,譬如全面审查需求,妥善安排进度,快速bug fix……

    但是,企业关心这些么?

    不过是搬砖的而已,能把砖搬过去就完事了,还管你怎么搬?

    外包单位就不说了,卖出去一个是一个,关键是挣差价,你的工资是成本,当然越低越好。

    互联网公司,钱烧得霍霍的,产品急着上线呢!还管你代码质量,只管你能加班不?!屎一样的代码糊上去再说,美其名曰“及时反馈快速迭代”……

    软件公司……等等,中国有软件公司么?反正除了屈指可数的那几家,目之所及真能赚钱的都是骗补贴的!

    明白了吧,这就是你问的为什么。

    老程序员本身没有贬值,所谓贬值,是因为人力市场的需求。

    怎么办?凉拌!

    唉,希望未来能有更多脚踏实地的、以产品质量取胜的软件公司涌现出来吧!


    invalid s的表述(以下推荐整理自:https://www.zhihu.com/question/378192972/answer/1494752370)

    古话说的好:“飞鸟尽,良弓藏;狡兔死,走狗烹”。

    不光程序员越老越容易失业,国内一切技术行当不都这样吗?

    身为技术人员,在自身职业前景上,必然要遭遇两个问题。

    • 第一个问题是他自己能控制的:你,究竟掌握了多高的技术?

    是面向搜索引擎编程、只会CRUD呢;还是能够编写更高质量的代码、解决日常问题?

    或者,是有充分的大中型项目设计、实施经验,甚至能够主持有一定难度的项目开发?

    或者是,你能否掌握“核心科技”,挑战业界大佬?比如和思科比比网络调度算法、和Linus比比OS开发、写个数据库挑战Oracle、搞个Hadoop挑战yahoo甚至google?

    可想而知,当你只会面向搜索引擎编程、只会CRUD时,你当然就是个一次性消耗品。用到三四十岁差不多也该用坏了,找个借口扔掉就是。

    比赛“跑不死就往死里跑”的话,你怎么可能比得上二十来岁的小年轻呢?

    想要“越老越值钱”,你就不能在年轻人的优势领域停留,你就必须不断提升自己、拓宽眼界、抬高上限——你猜Linus担心不担心失业?你猜yahoo里面编写/维护hadoop的、google里面优化big table page rank map-reduce的,他们担心不担心失业?

    你究竟学会了多少,就决定了你的命运。

    当你只能拼996007时,你那二十岁的身体还的确能支撑你扛大包;但到了三四十岁,哪怕没有落下一身职业病,你,还能像年轻人那样“昨天摔了一跤整条腿都紫了今天打个绷带照样活蹦乱跳”吗?

    所以你失业了。那些挤走你、顶替你的,也会像你一样,在被人超负荷使用十年、落下一身病痛后滚蛋。

    这就是第一个问题:你不为将来打算,急功近利透支身体996/007,所以你越老越容易失业。

    你不光越老越容易失业,你还会落下一身病痛。三四十的身体甚至比不上那些会保养的、六七十的老人。你不得不掏出大量金钱来维持自己的基本生存。

    如果你压根就不是什么“良弓”,凭什么阻止别人把你像垃圾一样踢开

    人无远虑,必有近忧。

    • 技术人员必将遭遇的第二个问题并不是他们能控制的。

    那就是:你把自己修炼成了全世界顶尖的超高精度复合弓;但你的国家压根就没有射箭比赛。

    是的,你懂操作系统内核;但中国有哪家公司在开发自己的OS?

    是的,你懂数据库算法编译器优化;但中国有哪家公司能做数据库能写编译器?

    如果整个社会都只能追逐那么几只半死不活的残疾兔子;你,身手矫健又有何用?

    人山人海,哪里见得到兔子。

    结果你还想吃多点,否则……都不够维持你的一身肌肉。

    相信我。用不了多久,你也会饿成一条病恹恹的瘦狗。

    那么,这就是国内醉心于技术者面对的窘境:我们压根就没有能插手基础性、支柱性软件项目的公司。唯一会的就是互联网,就是想尽办法薅用户羊毛的终端软件。

    对大多所谓的“互联网公司”来说,写这种软件,“面向搜索引擎编程”“调库专家”基本够用。更高的,他们根本不敢想。

    正是这种现状,使得一些缺乏眼界者压根不敢想“需要熟练使用链表算法的工作”;相反,他们会告诉你,会调库足矣、照搬互联网上搜到的代码就够用了——甚至还有在我的回答下言之凿凿、说“专家”说了,能搜到现成的代码就千万不要自己写,自己写的质量太差……

    但事实是,哪怕在中国,照样有不算太少的中高端职位;这些职位的基本要求就是“不准抄网上代码”。

    这是因为写出这些代码的人水平良莠不齐、写的时候也未必是按工业化/商业化标准精益求精(经常就是为了让初学者明白,所以省略了很多很多东西)——对这类中高端职位所要求的、业界top5%、top0.5%、top0.05%的、较为正规的程序员来说,这种东西说好听点叫粗制滥造,说难听点就是垃圾。

    当这些人崇拜的“专家”都在顶礼膜拜网上的劣质代码时,他们的水平也就可想而知了。

    眼界所限,他们完全不可能知道那些中等以上水平的程序员在做什么;在他们看来,一行代码出一堆错误是必须的——我说自己一口气写几千行不出错,他们就破口大骂:追着骂、单独开贴骂;直白的骂、阴阳怪气的骂……

    这种情况,在过去是不可想象的。

    在当时,别说垃圾到这种程度了,任何问题只要简单到用搜索引擎搜一搜就能解决,你敢问,就会被老手怼回去。很多论坛把“提问前应该做到什么”置顶;“STFG(Search The Fucking Goolge)”是被人普遍接受的、对小白问题的标准回复。

    但现在,连网上苦口婆心的解释都读不懂、只能逐字逐句照搬现成的代码的小白敢“组团围剿”那些敢说自己能写程序的“吹牛者”。

    可想而知,这种劣质码农的声音淹没一切时,这个行业会变成什么样子。

    别说开拓新的市场、新的疆域了,就连抄,他们都不敢抄热乎的。

    这反过来强化了劣质码农们的认知——没错,中国啊,它本来就不需要高于“面向搜索引擎编程”的装B犯。反正你们学了也没用,大家一起996,欢乐的卷起来吧。

    业界整体的低水平,使得你除非在校时就憋着一口气、玩命的往世界一流水平赶;否则一旦开始工作,庸人们很快就会把你拖进自己的节奏,然后干净利落的打败——这工作你能做我也能做,我见经理满脸堆笑,你呢?书呆子。什么叫你一周抵我们一年?谁看见了?

    中国技术人员地位低,原因就在于此。

    一方面,因为对未来的预期过低,因此从一开始就没学到东西,就是一劣质码农;另一方面,行业整体上限不高,绝大多数人还在一门心思的拉低下限。

    如此一来,未来哪还有好?

    但是,这并不是全部。

    事实上,正常的市场竞争下,谁落后,谁死。

    因此,报社的程序员可以写出django,车库里的穷小子能折腾出google。

    技术是需要积累的。只要学进去了,你的积累就绝不会是无用功。

    因此,虽然按比例算,也许99.99的程序员果然是年纪大了就得滚蛋;但这不正是他们为自己做的规划吗?起初就什么都没学到、入职了也只会996没有任何技术积累——美其名曰“你需要掌握的东西,入职一个月内就能学到”。

    呵呵,真这么简单全世界的大学都在坑钱不成?一个月就能学完的东西,非要把你拘禁起来教上本科四年硕士两年博士N年都还不让毕业?

    你把自己当一次性用品培养,就别怪别人用旧了把你一脚踢开。

    相反,那些真正知道四年本科要教你什么、知道你和世界先进水平还有多大差距的人,他们会抓住一切机会,不间断的前进,前进,继续前进。

    我大一就自学到了中断服务程序、可以直接写端口命令字绕开OS/BIOS直接控制硬件;也知道动画、音频、视频、3D图形等等的基本原理;当时同学间流行一个打字游戏,但我觉得那个东西写的不好,于是花了一周不到就写了个更好的。

    因此,我可以毫不含糊的吐槽——绝大多数本科生,四年连个大一水平都没学到。

    比我强的车载斗量。

    那么,本科四年我都甩开某些人四年,之后工作了,盯着那些比我强的紧赶慢赶,都不过勉强维持个“看得到别人尾灯”的局面;那么,一毕业就比我慢了四年、还以为一个月就学会了一生所需的全部知识的他们,有可能看见我车尾的扬尘吗?

    不光我不担心自己学的东西没人要;那些比我强的没边的,照样不担心自己学的东西没人要。

    甚至可以说,越是不顾那些庸人的眼光、我行我素学的精深的,越是不怕失业。因为人家的就业市场是全世界。


    竹青的独白(以下推荐整理自:https://www.zhihu.com/question/378192972/answer/1349746402)

    不是程序员这个职业越老越不值钱,而是现在的程序员处于工业革命早期煤矿工人所处的境地。

    新的世界刚出现一个雏形,现在的程序员只是在用自己的血肉去充当地基和铁轨,铸造锅炉并充当点燃第一把火的燃料。

    表面上看起来相对农民阶级(传统制造业),工业革命初期的产业工人收入待遇提高了很多,但是那是以压缩劳动寿命来实现的。

    他们确实代表着先进生产力的发展方向(并且就像煤炭行业至今仍然是采矿和机械制造业最先进技术的集中展示平台一样),但是悲哀的是,他们自身却不是先进生产力。

    他们用背篓和蜡烛,在没有任何安全保障的情况下,深入黑暗的地底,探索,挖掘,为开启新世界的工业革命带来所需的一切。

    代价就是自己的健康,从业人员的超高速新陈代谢,以及成为新世界教材里“旧世界低下的生产效率”的代名词。

    历史是一种循环。

    在座的各位应该都能看到AI代替人工码农的那一天,就好像用掘进和输送机械代替人力矿工一样,这是必然会出现的一幕。

    问题是,那一天到来时,现在的码农们又该怎么办?


    从知友们的各种回复中,我们不难看出,程序员越老越不值钱是一个公司层面乃至整个国内的行业因素导致的,让人有些无可奈何,如果想改变这个现状可能需要几代人共同的努力。

    但是同时,也有人表示,如果你能真的掌握某一领域的核心技术,持续的进步,并不会觉得自己会越来越不值钱。只有不断的充实自己,才会让自己有底气,让自己对未来有更好的愿景。

    所以你对职业生涯有什么规划?

    你觉得程序员是不是越老越不值钱了呢?

    在你的脑海中未来是怎么样的?

    欢迎留下你的想法进行讨论!

    展开全文
  • 点击蓝色“程序猿DD”关注我哟来源:LJ说先问是不是,再问为什么。难道美国的程序员就不加班吗?他们就一天八小时工作,还想来就来,想走就走?非工作时间完全找不到人?还有什么...
  • 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!软件工程师花费大量时间通过练习leet code问题和完善简历来获得更好的面试通过可能。一旦他们最终被谷歌...
  • 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |jerryhuang650来源 |toutiao.com/i65632153901077632...
  • 编程界最厉害的14位程序员

    千次阅读 2019-04-27 13:00:00
    点击蓝色“程序猿DD”关注我哟加个“星标”,不忘签到哦来源:ITWorld整理自网络导读:全球最厉害的14位程序员是谁?让我们一起膜拜一下这些大神,排名不分先后。01 J...
  • 摘要: 阅读全文久城 2007-08-29 08:53 发表评论
  • 点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!作者:阿里巴巴中间件来源:http://suo.im/4oTqHu从人工到自动化,从重复到创新,技术演进的...
  • 点击蓝色“程序猿DD”关注我哟加个“星标”,不忘签到哦来源:http://sina.lt/gga5关注我,回复口令获取可获取独家整理的学习资料:-001:领取《Spri...
  • 程序员

    2018-10-19 10:05:20
    nowcoder是一个程序员,他决定把每年的第256天作为程序员的节日,所以他一直期待着这一天的到来。请实现一款软件,给定一个日期,输出这个日期是该年的第几天。  输入描述: 输入数据有多组,每组占一行,数据...
  • 稳住,今天是周六,补一篇文章,当然轻松加愉快。...车友群里面立马有人不淡定了,虽然大家都猜出来,这应该是 APP 的 Bug,但还是难免要吐槽一下,讨论到最后,就快要“杀个程序员祭天了”!那么产生这个 Bug...
  • 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!来源 | W3CSchool东汉网络科技有限公司,本来是一家名扬四海的家族企业,可由于近几年来,越来越多的...
  • 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |始终来源 |liam.page/2016/06/20/big-O-cheat-sheet/复杂...
  • 点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!作者 |Arale来源 |https://www.jianshu.com/p/492903fb7005...
  • 点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!今天知识星球发文公告:8月20日之后产生的收入,对个人用户将收取20%手续费。这对于很多个人自媒体来说,无...
  • 程序员简历翻译自: https://hackernoon.com/a-fair-cv-of-a-programmer-c3dd3eca413b程序员简历
  • 点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!脱发已经成了这个时代最严重的一种威胁。从电商平台上护发产品的热销,到无处不在的植发广告,再到各大论坛里脱发...
  • 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!来源 |toutiao.com/i6743120716666765831/什么样的私活不能接1、没有第三方担保的个人对个人的尽量不要接,双方都没保障,出了问题...
  • 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |风一样的码农来源 |cnblogs.com/chenpi/p/5508949.htmlArray转ArrayList判断一个数组是否包含某个值在循环内部删除List中的...
  • 点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!>>阿里云8月最新优惠,点击查看<<大厦新搬进来一家创业公司,老板红光满面地提着果...
  • http://www.jianshu.com/p/2dd54ec0bb43 程序员纪录片 转载于:https://www.cnblogs.com/chunyou128/p/6427106.html
  • 点击蓝色“程序猿DD”关注我哟加个“星标”,不忘签到哦很多时候,大家可能都觉得程序员英文一定很好。因为我们每天都对着满屏幕的英文,噼里啪啦一整天。讨论个需求,还是不是冒几...
  • 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!来源 |公众号「阿飞的博客」全球最厉害的 14 位程序员!排名不分先后。01 Jon Skeet个人名望...
  • 软考——初级程序员

    2019-03-22 15:24:00
    这篇文章最开始是在小红书上写的。。。然后现在开始用开源中国就想把它转过来。...https://www.xiaohongshu.com/discovery/item/5b41bbd0910cf65c1dd5c7d1?xhsshare=CopyLink&appuid=589b051c50c4b...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 543
精华内容 217
关键字:

程序员dd