- 主题:请推荐 人生 应该学习的第一门语言,并给出理由
考虑到学生的基础,比如高考上来学生对编程一点概念都没有,即使CS专业
上来用python作为第一学期的第一门编程语言课我认为也未尝不可(可以用
选修制让有基础的学生选择别的语言或免修),好像MIT都这么干了?基础
算法练习python肯定是足够了,但是后面C/C++必须在主干课程里(不一定要
单开一门课),否则计算机系跟青鸟学校就没区别了。
【 在 eGust (十年) 的大作中提到: 】
: 基本 os 概念
: 数据结构、算法
: 编译原理
:
: 如果是 cs 专业的,这几点缺一不可吧。数据结构和算法可以单独用一门容易写的语言。
:
: 其它专业有明确需求的,比如要搞数据计算的,那直接学 R 或者 py 就够了
--
修改:Jacqueline FROM 114.249.196.*
FROM 114.249.196.*
python的库是用什么写的?
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 深度学习算法都是python写的
--
FROM 114.249.196.*
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: JPL设计好奇号火星车的时候,代码是python写成transpile成C代码的
: 认为底层离不开C/C++的人需要好好学编译原理
https://www.sohu.com/a/399365627_464041
SpaceX 飞船和火箭软件由 C++ 实现!
2020-06-02 17:00
北京时间5月31日凌晨3点22分,NASA 与 SpaceX 合作,猎鹰9号火箭顺利升空。这是 SpaceX 公司首次利用载人龙飞船,把两位宇航员送入地球轨道。
31日22点30分,载人龙飞船与国际空间站成功对接。
6月1日凌晨1点23分左右,搭乘龙飞船的两位美国宇航员进入国际空间站。
来源:程序员的那些事
北京时间5月31日凌晨3点22分,NASA 与 SpaceX 合作,猎鹰9号火箭顺利升空。这是 SpaceX 公司首次利用载人龙飞船,把两位宇航员送入地球轨道。
(猎鹰9号火箭升空)
31日22点30分,载人龙飞船与国际空间站成功对接。
6月1日凌晨1点23分左右,搭乘龙飞船的两位美国宇航员进入国际空间站。
空间站上的三位宇航员与龙飞船上的两位宇航员(右一右二)碰面
Dragon 飞船和 Falcon 9 火箭都广泛使用定制版的 Linux 系统,飞行软件使用 C/C++ 编写,飞船内的图形显示应用是基于 Chromium/JS。
可能有程序员(包括我自己)对 SpaceX 工程师们用到的技术栈感兴趣了。于是就搜寻相关公开信息。
终于找到 2013 年 SpaceX 的软件工程师在 Reddit 做过一次公开回应,回答网友们的提问。
一、SpaceX 软件工程师团队在干什么
SpaceX 软件工程师的目标有 2 个:
火箭和航天器上运行的代码;
火箭和航天器的设计和制造过程的代码;
工作内容范围就很大了,从大型 Web 应用到小型嵌入式计算平台都有涉及。
SpaceX 软件工程师的技术栈:
C#、MVC4、EF、MSSQL (REST);
Java、Knockout、Handlebars、LESS;
C++、 Linux、C、Python、LabVIEW、MATLAB;
看到这,肯定有人冒出疑问了,C# 和 MVC 与火箭发射没有关联吧?
嗯,没关系,它们是用来开发内部信息系统的。
SpaceX 有 4 个独立的软件团队。
1、飞行软件团队
大约有 35 人(这是 2013 年的人数)。猎鹰9号火箭、蚱蜢火箭和龙飞船上所有的代码,都由飞行软件团队包圆了。
此外,他们还得:
编写仿真软件,测试飞行代码;
编写部署在地面站的通信和分析软件;
在飞行任务控制部门工作,为现役任务提供支持。
2、企业信息系统团队
建立内部软件系统,让 Spacex 得以运转。
这个团队中的成员身兼多职,但他们开发和发布的旗舰产品,几乎所有 SpaceX 员工都在使用的内部 Web 应用程序。
包括:
创建采购订单和填写零件库存的人员,
工程师创建设计和工作订单,
技术人员在现场打卡并根据这些设计查看当天的工作内容。
(基本涉及到方方面面了。市面上有一些商业化产品可以满足他们的需求,但 SpaceX 是自己开发了)
SpaceX 正在从一个研究和工程公司转型为一个制造公司,该团队功不可没。他们充分利用了C#/MVC4/EF/SQL、Java/Knockout/Handlebars/LESS 和 REST API。
3、地面软件团队
这个团队大约有 9 人。主要在 LabVIEW 中编码,开发用于任务和发射控制的 GUI,供工程师和操作人员监控飞行器遥测和指挥火箭、航天器和平台支持设备。
他们在高度分布式系统中推送高带宽的数据,并实现有严格要求的复杂 UI,以确保操作人员能够及时控制和评估航天器。
LabVIEW 是什么?
LabVIEW(英语:Laboratory Virtual Instrumentation Engineering Workbench)是由美国国家仪器公司所开发的图形化程序编译平台,由杰夫·考度斯基(Jeff Kodosky)发明,程序最初于 1986 年在苹果电脑上发表。
LabVIEW 早期是为了仪器自动控制所设计,至今转变成为一种逐渐成熟的高级编程语言,目前广泛的被应用于工业自动化之领域上。
图形化程序与传统编程语言之不同点在于程序流程采用"数据流"之概念打破传统之思维模式,使得程序设计者在流程图构思完毕的同时也完成了程序的编写。 —— 维基百科
4、航电测试团队
他们与航电硬件设计工程师一起合作,编写测试软件,尽早发现硬件问题。
该团队的主要任务:写出非常全面和强大的软件,以便能够在大批量的情况下自动发现硬件的问题。
测试软件通常是在机械环境测试的时候运行。
【说明】:可能有童鞋要问,前文技术栈提到了 Python,怎么没有说用在哪方面呢。测试团队做自动化测试时,肯定用了 Python。
我们来看看 SpaceX 部分涉及测试的岗位要求:
https://p9.itc.cn/q_70/images03/20200603/a081eef689bc46c1a7e4739112c73340.jpeg
二、SpaceX 工程师答网友问
问:导航/推进控制系统用了哪种操作系统?
答:龙飞船和猎鹰9号用的是 Linux。
https://p7.itc.cn/q_70/images03/20200603/a276e3f2ee7246a49b8f7f22d63154df.png
问:主力编程语言是哪个?
答:火箭和飞船都是 C++。
https://p7.itc.cn/q_70/images03/20200603/8e00cf011a314dceb343f1d14f18a06d.png
问:你们当前最大的项目代码量是多少?
答:运载工具代码约为几十万行。
问:维护麻烦吗?
答:不麻烦,这就是我们的工作!实际上,我们对代码库非常满意。
问:你们最具挑战性的项目是什么?为什么?
答:龙飞船对接国际空间站是一个重大挑战。因为必须要开发许多新代码。
(程序员的那些事 补充:今天成功发射的龙飞船,可以自动与空间站完成对接。第一代龙飞船需要借助空间站上的机械臂。当然,载人龙飞船也保留了人工对接的选项。SpaceX 在 2013 年的龙飞船是第几代,我没查。 )
问:你们觉得最有成就的是什么?
答:龙飞船对接国际空间站。
https://p0.itc.cn/q_70/images03/20200603/983ff91b800840098dcb1c4323f45e41.png
问:你们怎么平衡工作/生活?我听说在 SpaceX 很容易职业倦怠。你们都在煎熬吗?
答:SpaceX 体现了小型企业的心态。我们全都投资于 SpaceX 及其成功。话虽如此,我们的工作时间却更长。归根结底,还是要看你生活中最重要的是什么。我们当然要应对职业倦怠,那就是休假 :-)。
就我个人来说,大多数时候我甚至没有注意到我已经工作了12~14个小时。我看着时钟,想着“时间过的真快都用哪里了?”。我认为这证明了我们对项目感到兴奋的程度。当你真正享受自己的工作时,并不会感觉像是在工作。话虽如此,我仍然会时不时地休假,借以保持理智。
https://p5.itc.cn/q_70/images03/20200603/e9f31c8dfa5c4559bd16b40baedab828.png
(程序员的那些事 补充:我查看了 SpaceX 的招聘信息,很多技术岗位,基本都有一个额外要求:必要的时候,能加班。)
https://p6.itc.cn/q_70/images03/20200603/d3c30e9890354e2a99d2ca51b22eb56b.png
还有个当年正在攻读天体物理学的学位的童鞋问:
对于航天行业,你们觉得最常用/最有用的编程语言是什么?我的编程经验非常少,而且很想开始学习,因为这个行业的每一个方面/研究似乎都需要对编程有一定的了解。
SpaceX 工程师的回复:
对于所有软件工程师来说,C 语言是一门很好的入门语言。它迫使你学习 CPU 是如何工作的,内存是如何工作的,等等。一旦你掌握了 C 语言之后,再去看 C++。
我们团队所有人都有不同的背景,没有什么特别的路径,我们都是沿着一条路走到这里的。就我个人而言,我在学校里得到的最好经验就是做了个人编程项目。这年头在网上和应用商店里有很多机会,可以做一个产品,公开自己的作品让他人看到。
--
修改:Jacqueline FROM 114.249.196.*
FROM 114.249.196.*
C#是万年老五,亲爹都二次离职了,自己玩玩小项目可以,推广还是算了,
尤其是考虑国内薪资垫底的实际情况,不符合面向工资编程的基本精神。。。
【 在 a0123456789q (a0123456789q) 的大作中提到: 】
: 标 题: Re: 请推荐 人生 应该学习的第一门语言,并给出理由
: 发信站: 水木社区 (Mon Jul 5 19:16:39 2021), 站内
:
: 这几点理由里,C#是有力竞争对手,因为:
: 1)开源不比java差——标准开源,编译器开源,开发环境VsCode开源而VsCommunity免费,编译器Rosylyn开源,运行环境.net开源
: 2)跨平台指日可待
: 3)数据库无缝连接.
: 4)asp.net 可以与jsp竞争
: 5)在科教领域,优于java。
: 6)语言特性好过java
--
FROM 114.249.196.*
你这种一行C/C++都没写过的,看什么新闻都会产生误读的。
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 龙飞船整套操作界面都是CEF写的。。。
: 控制系统的代码,美国现在标准玩法是高级语言直接生产C++代码。就spaceX那几个毛人就不要学华为手撸了。。。
--
FROM 114.249.196.*
【 在 eGust (十年) 的大作中提到: 】
: 先说一下,我的专业跟 cs 一毛钱关系都没有,所以不知道课程是怎么设计的。一般来说应该有个总论,之后应该还有一门编程的入门课。然后才能到算法和数据结构吧。
:
: 搜了一下,
:
https://cs.stanford.edu/academics/courses:
: 没看到传说中的101,CS106A Programming Methodology 比较像入门课,而算法和数据结构的课程都已经排到160+了,看起来不像一开始要学的东西。
刚刚看了看,MIT 6.006 算法引论早已用Python了,与时俱进!
--
FROM 114.249.196.*
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: java的竞争对手是kotlin
我觉得吧,你们三本毕业的肯定想不出来世一大都教些什么:
强烈推荐一发CMU的15-122
安然无恙(其实头发很有恙)的度过了在匹兹堡的第一个学期,能在五门课中活下来证明还是有进步的,即使忙碌的、焦躁的,绝望的日夜占了学期的大多数。要说这学期最喜欢最新奇收获最大的课,我觉得应该是当仁不让的15-122。
迫于淫威,选择了这门不计入毕业学分的本科生level的CS课,全名叫做Principles of Imperative Programming,以教授命令式编程(C)与基本的数据结构为主线,是要declare CS major的学生必修的基础课以及核心课程。所以有200+的学生和30+的TA,并且基本上所有的学生都是first year(first year graduate的我惭愧的低下了头)。
这门课的workload要比我这学期上的所有其他研究生课程的workload都来的大。每周一交一个written homework(共13次),每周四交一个programming homework(共11次),每周两次lecture,课上会有随机的quiz(计入总分),每周一次lab(计入总分),每周一次recitation,两次midterm和一次final。
这门课讲了什么呢?首先从最最基础的二进制讲起,然后开始将数据结构与零零散散的东西穿插起来介绍(看到syllabus可以感觉到每节lecture的内容都是精心安排的)。数据结构有介绍了array,stack,queue,linked list,unbounded array,hash tables,set,BST,AVL tree,priority queue,heap,graph,union find等。
但是这门课不光只是介绍了数据结构,还有很多零零碎碎的东西也被提上了桌面。比如说lecture里有教几种sort和search的方法,命令式编程中的pointer,编程时需要尊重client和library的interface,如何写各种test case,使用void*和函数指针写出generic的函数,C的内存模型,undefined behavior,虚拟机等。lab里有着重锻炼书写test case,recitation里还有对lecture内容的补充(比如说用stack实现DFS,课上用的是recursion)。
我为什么喜欢并推荐这门课呢?
首先,这门课有两位负责任的instructor。Stephanie虽然上课十句话里有一句讲错,写代码三行里必出错别字,但是上课非常有趣。在实现数据结构的interface的时候,她常常尝试用不同的方法,即使方向是完全错误的,她至少让我们看到了这么实现的弊端在哪里。作为一门CS的基础课,能够做到授之以渔便是最大的成功。Illiano作为这门课的主管,对整个课的质量把控的非常严格,所有的作业基本都是两天内出分,grading能够做到你心服口服。上课的方式也很有趣(貌似本科生的课都很有趣),比如说有一次编程作业是图片变换,有一个bonus的题,想出你最喜欢最美丽的图片变换并写代码。一周后的课堂上突如其来的评选出了top 10送小礼品+送加分。
其次,这门课的TA非常负责(只能说有一些TA非常负责)。有一次written homework我做的比较差,因为有一道大题没太明白题目意思,于是就去OH准备和TA把分数argue回来,她非常耐心的和我解释每一条扣分点在哪里,把本来打算找他们算账的我说的心服口服。更加负责的是,后来我登录上去我的gradescope,发现她在我在OH问的那些问题的旁边把她的解释完整的加在了备注里,为的是我考试复习的时候比较方便。这是最最最让我感动的一点。还有,midterm2的时候,我因为时间来不及胡乱猜了两三个答案写在试卷上,有两个蒙对了但是TA没给我分。跑过去regrade,ta说一看你就是不会写瞎蒙的,不能给你分。
第三,课程的设置非常的有foresight。学期初有一次编程作业里的一个task是对图片做高斯模糊,其中的一个步骤是对图片加padding,并且用方格遍历选取最大的元素。后来上到601 CNN的时候,才明白过来原来这就是CNN里的max pooling layer。其他的作业也非常实用,比如说用gap buffer实现text editor,写一个PRNG,使用heap实现huffman tree然后变成一个用来压缩文件的程序(真的可以用来压缩和解压缩文件和图片!),写一个虚拟机的decoder,类似于汇编码的decoder(真的可以用来跑c0文件的bytecode!)。
第四,很难,很push。push是我对这门课最大的感受。比如说好死好活写了一次programming homework,只占总分里的2.5分,一次written homework只占100分的的1.2分。并且这门课是不curve的,严格按照90分以上是A的标准。真是对于任何一次作业都不敢不好好做(否则一次扣0.5分真的伤不起)。同时,总评的grading还会case by case,意思就是即使总评90+,如果三次考试的平均分不到80%,也会按照B处理。或者是如果programming homework的分数太低,就会收到D的总评,直接剥夺下学期选15-213的权利。这门课的push同时还体现在每次作业限制autolab的提交次数(5-7次),以及coding style的规范,以及有几次的作业需要考虑efficiency,以及有几次的作业是在due之后才会给你评分(意味着无法根据autolab的提示进行debug)。
最后,整个课程的材料都让我感觉到设置的精心。比如说基本上每次的编程作业,都会提供几百个test case来测试你程序是否有bug。像最后一次作业,他写了350+个的test case来测试你的程序,我觉得这在一般的课程上是做不到的吧。另外,为了上这门课,这门课当初的设计者写了一门新的语言叫做C0。C0是C语言的一个子集,里面剥夺了一些容易让程序失控的特性,比如说casting,比如动态内存的回收,比如指针运算,比如一些ECF(break等)。同时添加了新的数据类型比如string,以及string的操作(以替代神烦的strxxx系列)。为了一门课程直接写一门新语言真的是细想极恐。
总而言之,15122真的是我到目前为止最满意的CS课(甚至超过15-513),强烈推荐闲的发慌的人去上一波。
--
FROM 114.249.196.*
教育教育你这种成天把钱钱钱放在嘴边的卢瑟而已
【 在 lixunhuansk (李寻欢) 的大作中提到: 】
: 你这么牛逼这么不继续写C C++呢?
: 干嘛炒股票呢?
: 为啥放弃汇编呢?
: 为啥呢?
:
: CC++那么牛逼赚钱你怎么就不写了呢?
--
FROM 114.249.196.*
这有点过分了。。。有可能叫兽是个函数派原教旨主义者。。。
【 在 adoal (阿豆) 的大作中提到: 】
: 有可能啊。之前遇到过有在澳村上学的大一小盆友找我问Haskell,
: 原因是第一学期就在毫无背景的情况下要求用Haskell写康威游戏-_-;;;;
: 关键还特喵不是CS的-_-;;;;
: ...................
--
修改:Jacqueline FROM 114.249.196.*
FROM 114.249.196.*
【 在 adoal (阿豆) 的大作中提到: 】
: 嗯。第二学期回到常规路线了,用Java做作业……依然是全自学。
说实在的国外很多大学本科教学并不怎么样,靠谱的还是MIT,CMU,斯坦福
那几家,不过也对学生基础有很高的要求。。。
--
FROM 114.249.196.*