热点推荐

查看: 3195|回复: 2

干货分享-给想自学It编程的小白的一些建议

[复制链接]

1418

主题

1532

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
39191
发表于 2018-2-13 08:53:41 | 显示全部楼层 |阅读模式
干货分享-给想自学it编程的小白的一些建议

最近总有一些小伙伴问我,现在大二,想自学编程,但是
不知道如何下手?
不知道该学哪一门编程语言,c/c++?java?c#?还是php?
不知道c++、Java、php之间有什么区别?
是不是学习java之前要学c?
学习了Java基础之后又该学什么?
如果你也有这些疑问,那就继续看下去,如果没有就可以return了。
首先不要灰心哈,小编到底也是过来人,纯自学的,你们现在遇到的坑,我基本上都爬过。我大二的时候都不知道javascript和Java有什么区别,甚至以为数据库和数据结构有紧密的联系,我现在依然能找到一份满意的工作和待遇!!只要记住——你们现在有大把的时间去爬坑。小编也将从以下几个方面,通俗易懂的表达以下自己的经验和想法,希望可以帮助到大家。
一、首先有必要了解一些常见的编程语言
小编接触到的一些常见的编程语言,c、c++、Java、c#、php、python、javascript、Objective-C、Swift、R等。
1.学习的顺序
小编大学课程中有”谭浩强c语言程序设计”这门课程,我当时想学习Java同时也很迷惑,c和java有什么关系?是不是要学习java必须先学习c语言?你们有木有如此迷惑过?现在告诉你,没有半毛线关系!你如果想学java,c#,php等任何一门语言,立即就可以学,没有先学c才能学java的必要条件。只不过是说,你如果有了其中一门语言的基础,学习其它的比较容易入门而已,毕竟所有的编程语言也有一些共性,都会有基本的语法,数据类型,顺序结构等。
2.语言特性及归类(此部分也可以直接break(跳过))
当然以下常见编程语言的分类只不过是我个人的理解及浅薄的经验之谈。做个参考就好。按照语言的特性,大概可以这样归类一下:
如c、c++语言是面向结构的。c++扩展了c语言的特性,具有一些面向对象的特性。Objective-C据周围同事说是苹果公司对c语言一种封装,反正是用来开发ios应用的,其语言特性和调用方式与c语言很像,因此如果你有c语言的基础,入门ios开发很easy.
如java 、c#是面向对象的。具有抽象、继承、封装、多态等特性,因此你如果学习了其中一门语言,另一门语言也能很快上手。至于面向结构和面向对象有什么区别,小编不知道如何表达,自行百度吧.
如python、javascript是脚本语言,具有动态语言的特性。意思就是可以再程序运行时改变变量的类型,例如在javascript语言中,声明一个变量赋值为一个数字,运行程序后,你把此变量动态赋值为字符串,没问题是合法的,程序正常运行;相反如果在java(没有动态语言特性的)中声明一个为int类型,如果你给这个变量赋值为字符串类型,程序就会报错编译不通过。
因此,如果你想学习两种编程语言,建议你不要选择特性一样的两种语言学习,例如你如学习了java,你可以选择Python或者c++学习,这样学习的时候可以比较一下不同特性编程语言各自的优缺点,对你以后做架构,选择业务实现的技术方案有很大的帮助。
二、如何选择一门编程语言
了解了基本的编程语言后,相信你又跌入了该学习哪一门语言的坑中。这个问题的关键在于你不知道学了这门语言能干什么!也就是编程语言的应用领域或者开发方向。
以Java为例(小编是学Java出身),Java在移动端,服务端,大数据等领取有着广泛的应用,那么你学习Java基础之后就可以选择这个几个方向,移动端就是Android开发,服务端像Javaweb开发,大数据如hadoop技术等。
c语言可以 嵌入式方向学习;c++ 可以用来开发游戏、游戏服务器框架及游戏引擎、编译器等;c#可以向 winfrom窗体程序开发(就是window上安装的exe程序,如qq),asp.net网站开发技术,服务端开发,Unity3D游戏开发等;javascript,这个语言的方向就太多了,号称全站开发语言,node.js全栈开发技术,web前端jQuery,Vue.js,移动端技术ReactNative等;python,可以用来做网站爬虫,搜索引擎,也可以开发网站,人工智能领域应用更广泛如数据分析,机器学习等。。。。。
小编理解的大概也就这么多,说的并不准确,建议大家去谷歌 or 百度,或者去知乎找答案,关键词如java开发方向或应用领域。
更加强烈建议大家去一些互联网招聘网站如拉勾网看看一些技术岗位,这样定位更加准确,如下图

这下你总该知道你要学习什么了吧
三、寻找学习路线
当你确定了你想学习的编程语言及以后的开发方向或应用领域后,你肯定又不知所措,我该怎么学习呢,先学什么,后学什么。
这个问题小编就心有余而力不足啦,毕竟也只是学过Android和一点点
javaweb而已,最多知道它俩的学习路线。
但是你可以百度搜索,作为一个程序员搜索引擎才是你最好的老师!!,如你想学习ios,关键词ios学习路线图,肯定有不少。菜鸟要飞的平台上也提供了常见开发技术的学习路线图。小编更推荐你去一些培训机构的官网浏览他们的培训的课程目录,很详细的!否则怎么吸引人呢。
四、我该选择哪一个方向
即使前3步你都OK,你肯定还会问类似的问题,我到底是学Android还是ios,哪个工资高?大数据技术现在很热门,选择haoop吧?
首先,根据你自己的兴趣。这个和不说的一样,作为一个小白,你都不知道Android开发到底做些什么,hadoop又是什么玩意,谈什么兴趣呢?除非你确定你对某一个领域感兴趣,那就去学吧。
其次,你只是为了毕业以后好找工作,待遇好些。这个就稍微能找些实际的参考依据啦,去拉勾网等类似的互联网招聘网站,搜索职位关键词分别看一下对应的职位的数量,比较一下同样的工作经验哪个工资更高。无论你是选择移动端还是we前端还是服务端,只要技术好工资都不低!
还有,新技术相对而言工资是高点,但岗位也少。如大数据,人工智能等这些新技术的岗位也就在一线城市可以搜索到,你学了这些就意味着你必须去北上广深拼搏,否则找不到工作。所以如果你有心仪的奋斗城市,就结合一下该城市的岗位去选择你要学习的技术。
最后,并不是你现在学习了Android开发,工作以后就一定一直做Android。编程技术的变化和发展是很快的,说不定什么时候就被淘汰了;工作后,要根据工作需要学习对应的开发技术。所以最重要的是培养自己学习新技术的能力。而大学期间,最好多学习一些技术,扩展自己的广度,毕业后找工作的选择会多一点。毕竟没有工作的实战场景想提高某一个开发技术的深度是很难的。个人认为,大学期间的学习最大的作用是通过学习不同的技术来寻找真正适合自己的方向。技术深度的提高是在工作的实战中积累的。而提高自己技术广度最好的办法就是自己独立或者和别人合伙,完整一个简单的线上项目,这个过程会让你对很多疑惑豁然开朗!
以上只是小编浅薄的经验之谈,欢迎留言交流!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

23

帖子

59

积分

Lv1码农小白

Rank: 1

积分
59
发表于 2021-6-22 12:00:27 | 显示全部楼层
C++ 常见编程技巧总结
这篇博客,是我阅读《Effective C ++》这本巨作,然后根据自己的理解,加上了一些见解,代码有些是参考本书的,希望可以帮助你们理解C++ 的一些机制,关于详细情况,还是请你们观摩这本巨作。

确定对象被使用前已被初始化
有时候,读取未被初始化的值会导致不明确的行为。

对于无任何成员的内置类型,必须手动完成初始化

int x = 0;
构造函数的初始化和赋值是有所区别的。赋值是指在构造函数调用之后,通过用户自己输入的值进行运算,这是赋值,而初始化一定是在调用构造函数时候就完成的
要想真正的初始化,可以使用成员列表进行初始化。初始化的效率比赋值要高

初值列中针对各个成员变量而设的实参,被拿去作为各个成员变量的构造函数的实参。比起先调用构造函数再调用拷贝构造,直接极速赛车调用一次拷贝构造的效率要高很多
如果成员变量是const 或者 reference ,那就一定需要初始化而不能赋值

基类总是比派生类更早的初始化,class的成员变量总是以声明次序进行初始化,尽管它们在成员初始化列表中的顺序不一样,所以尽量保持两者顺序一致。

static成员变量的初始化
non-local static

static 成员寿命是从被SG飞艇构造出来到程序结束为止

函数内被定义的static成员称为local-static 其他的称为 non local-static

以函数调用(返回一个引用指向local static 对象)替换直接访问 non-local-static对象,就可以保证获得的那个引用指向一个历经初始化的对象

class FileSystem{};
FileSystem tfs()   //这个函数用来替换tfs对象,它在FileSystem中可能是个static对象
{
    static FileSystem fs; //定义并初始化一个static对象
    return fs;            //返回一个引用指向上述对象
}

从一个角度来看,通过函数返回static对象初始化 技术技巧过后的引用,使得他们成为inlining的候选人,但是另一方面函数内涵“static独享”的事实使得他们在多线程系统中带有不确定性

具体改进方法:在程序的单线程启动阶段手动调用所有的 返回引用函数,这就可以消除与初始化有关的“竞速形式”

构造/析构/赋值运算

构造函数/拷贝构造/析构函数/赋值运算符重载/这些函数都是在需要时才会被编译器创建出来

派生类的防拷贝,把拷贝构造函数声明为private,这样就可以阻止拷贝行为

**2.将拷贝构造和赋值拷贝声明为私有的,这样可以防止别人调用
但是成员函数和 friend 函数还是可以调用他们**

如果你没有声明这些函数,编译器会自动声明,所以最好还是自己声明必须好

为多态基类声明 virtual 析构函数
如果一个派生类对象经由一个基类指针被天津快乐十分释放,而这个基类没有 virtual析构函数的话,那么就会导致派生类对象的成分没有被销毁,造成局部销毁

形成资源泄漏,败坏数据结构,在调试器上浪费许多时间

解决办法:给基类的析构函数声明为virtual ,这样就可以避免局部销毁了

虚函数(在运行期决定哪一个 virtual 函数被调用)

vptr指针指出,vptr指向一个由函数指针构成的数组,称为 vtable,每一个带有虚函数的class都有一个相应的 vtable

如果一个不想被声明为基类的类增加了虚函数,那么对象体积将会增大,一个指针在64位系统中占8个bit

一定要注意不要把一个派生类对象给基类指针,这样会引发问题

SpecialString* pss =  new SpecialString("Impending Doom");
std::string* ps;

ps = pss;
delete ps;//未有定义,现实中*ps会出现资源泄漏,因为派生类的析构函数没有调用

- 生成一个抽象基类,应该具有一个 virtual 函数(不能被实例化)

class AWOV{
    public:
    virtual ~AWOV() = 0;
};

AWOV::~AWOV{}
在完成声明之后最好定义一下

异常中的析构函数
类中的数据成员应该被正确的销毁,即使是在抛出异常168开奖网的情况下。

在两个异常同时存在的情况下,程序不是结束执行就是导致不明确行为

为了解决抛出异常导致程序不能正常关闭的问题,我们可以在析构函数中调用 close函数
————————————————
版权声明:本文为CSDN博主「IT菜鸟闯天下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。



           



回复

使用道具 举报

0

主题

16

帖子

36

积分

Lv1码农小白

Rank: 1

积分
36
发表于 2022-5-27 11:22:08 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表