本科实习生软件开发一月工资_我从第一次软件开发实习中学到了什么

本科实习生软件开发一月工资

by Viraj Chavan

Viraj Chavan着

我从第一次软件开发实习中学到了什么 (What I learned from my first ever software development internship)

I was a student at an engineering college in India. After 3 and a half years years of learning computer science academically, I now had a chance to test my knowledge in the real world through an internship.

我是印度一所工程学院的学生。 经过三年半的学术学习计算机科学,现在我有机会通过实习来测试我在现实世界中的知识。

In this article, I’ll be sharing my internship experience at Josh Software, Pune with the hope that it is helpful to other IT and computer engineering students that are looking for internships.

在本文中,我将分享我在Pune的Josh Software的实习经验,希望它对正在寻找实习机会的其他IT和计算机工程专业的学生有所帮助。

Like most of my colleagues at the college, I had a very limited view about software development in general and didn’t know what to expect from an internship.

像大学里的大多数同事一样,我对软件开发的总体看法非常有限,也不知道实习会有什么收获。

Lucky for me, I was assigned a live project, which was based on Ruby on Rails, something that I had already developed an interest for.

幸运的是,我被分配了一个实时项目,该项目基于Ruby on Rails,我已经对此感兴趣。

After I had learned PHP and MySQL in the 2nd year of my studies, I built a basic web app, and all that it did was some CRUD (Create, Read, Update, Destroy) operations. I remember talking with a friend who had similar skills to mine, and said “Even we can build Facebook now that we know PHP and MySQL!”

在学习的第二年学习了PHP和MySQL之后,我构建了一个基本的Web应用程序,它所做的只是一些CRUD(创建,读取,更新,销毁)操作。 我记得和一个与我有类似技能的朋友交谈过,他说:“即使我们已经了解PHP和MySQL,也可以建立Facebook!”

How ridiculously simple things seemed at that time. Now I understand how complex building/maintaining a software can be.

当时的事情看起来多么荒谬。 现在,我了解了构建/维护软件的复杂性。

So here’s what I learned from my Internship while working on a live project.

这就是我在实习项目中从实习中学到的东西。

一般课程 (General lessons)

规模产生巨大变化 (Scale Makes a huge difference)
  • How many users are going to use the software?

    有多少用户要使用该软件?
  • How much data will be processed?

    将处理多少数据?
  • What are the expected response times for a function?

    功能的预期响应时间是多少?

These are questions that we, as college students, hardly think about. Our college projects were usually short-sighted. In real-world projects though, the above questions fundamentally affect decisions about hardware, technologies/tools to be used, system architecture, algorithms, and so on.

这些问题,我们作为大学生,几乎不会想到。 我们的大学项目通常是短视的。 但是,在实际项目中,以上问题从根本上影响有关硬件,要使用的技术/工具,系统架构,算法等的决策。

使用大型代码库 (Working with a large codebase)

Back in college, we used to work on projects that had like 15 - 20 files or so. Built in under a week, the whole project could be understood in a few hours.

回到大学时,我们曾经从事过15至20个文件左右的项目。 不到一周的时间便完成了整个项目,几个小时之内就可以理解整个项目。

Now the project I’m working on has hundreds of files spread across dozens of folders. It can take months to understand the whole project, and hours to debug a bug that’s spread across multiple files. And the first time you look at the whole project directory, you don’t know where to start understanding the code.

现在,我正在处理的项目中有数百个文件分布在数十个文件夹中。 要理解整个项目可能要花费几个月的时间,而调试分布在多个文件中的错误可能要花费数小时。 第一次查看整个项目目录时,您不知道从哪里开始理解代码。

编写可维护的代码 (Writing maintainable code)

Knowing that the code you write will be read, understood, and improved/changed by someone else (or even yourself) in the future makes you write code that’s maintainable.

知道您编写的代码将来会被其他人(甚至您自己)阅读,理解和改进/更改,因此您可以编写可维护的代码。

In college, all I focused on was getting the expected functionality to be complete, and never considered whether the code I wrote was maintainable.

在大学里,我只专注于完成预期的功能,而从未考虑过我编写的代码是否可维护。

This resulted in scrambled pieces of code that somehow worked at the time. But two days later even I wouldn’t understand why I had written a certain piece of code that way. And changing some part of the code almost always broke other parts. ?

这导致了当时混乱的代码片段。 但是两天后,我什至不明白为什么我用这种方式编写了一段代码。 更改部分代码几乎总是会破坏其他部分。 ?

Code Maintainability is easier to recognise by its absence, like when something you thought should take an hour ends up taking a week.

由于缺少代码可维护性,因此易于识别 ,例如您认为应该花费一个小时的事情最终要花一周的时间。

正确使用版本控制系统 (Using a version control system - properly)

When I first started building small software, all the files existed on my own development machine, and maybe they were backed up to Google Drive as regular files.

当我刚开始构建小型软件时,所有文件都存在于我自己的开发计算机上,也许它们已作为常规文件备份到Google云端硬盘。

Then I got to know about GitHub, but I merely used it as a safe storage place for my code. I used the GitHub desktop app to commit all changes on just the master branch. I even hesitated using it through the command line.

然后我了解了GitHub,但我只是将它用作代码的安全存储位置。 我使用GitHub桌面应用程序仅在master分支上提交了所有更改。 我什至在命令行中犹豫使用它。

Now not a day goes by that I don’t use Git. It’s such a great tool for collaboratively writing code, distributed development, branching out for new features, pull requests, and so on.

现在,一天不过去了,我不使用Git。 这是用于协作编写代码,分布式开发,为新功能而分支,拉取请求等的出色工具。

Here’s a little article on why version control systems are awesome!

这是一篇关于为什么版本控制系统很棒的小文章

使用测试驱动开发方法的重要性 (The importance of using a Test Driven Development approach)

During my internship, I was assigned to work on a new feature that was to be added to the main project .

在实习期间,我被分配去研究一项新功能,该功能将添加到主项目中。

I wrote the code and tested if it was working the way it was supposed to. It worked perfectly, or so I thought. I deployed the feature to the production confidently, and moved on to work on something else.

我编写了代码,并测试了代码是否按预期的方式工作。 效果很好,或者我想。 我自信地将功能部署到生产中,然后继续进行其他工作。

After a few hours, Rollbar, a real time error reporting tool burst with a number of errors in our code deployed to production. I checked the errors and they seemed unrelated to anything I had ever worked on.

几个小时后,实时错误报告工具Rollbar爆裂,在部署到生产环境的代码中出现了许多错误。 我检查了错误,发现它们似乎与我曾经从事的工作无关。

After some debugging, all of those errors traced back to a single method. A method that was called in numerous places, and in which I had modified just a single line, and hadn’t checked where else it was used.

经过一些调试后,所有这些错误都可以追溯到单个方法。 该方法在很多地方都被调用过,在其中我只修改了一行,而没有检查它在其他地方使用过。

Now this could’ve been avoided if the code that used that method had test cases written for it, and if I had checked if all the test cases ran successfully before deploying the code. That made me realize the importance of test driven development.

现在,如果使用该方法的代码已为其编写了测试用例,并且在部署代码之前我检查了所有测试用例是否均已成功运行,则可以避免这种情况。 这使我意识到测试驱动开发的重要性。

Here’s an article to understand why writing test cases is important.

这是一篇了解为什么编写测试用例很重要的文章。

Ruby on Rails / Web开发特有的内容 (Things specific to Ruby on Rails/ Web Development)

MVC架构 (The MVC Architecture)

Back in my college days, when I developed applications in PHP, I had no clue what Model, View, and Controller were. Any project was so complexly scrambled that I couldn’t find in which file a piece of important logic was written. The HTML embedded PHP scripts at odd places and I had placed all the files in just one folder.

在大学时代,当我用PHP开发应用程序时,我不知道什么是Model,View和Controller。 任何项目都如此复杂,以至于我找不到在哪个文件中写入重要逻辑的内容。 HTML嵌入PHP脚本位于奇怪的位置,我将所有文件放在一个文件夹中。

Then I learned about the Rails framework, and got accustomed with the MVC architecture.

然后,我了解了Rails框架,并习惯了MVC架构。

Model-View-Controller (MVC) is an architectural pattern that separates an application into three main logical components - Model, View, and Controller. Each of these components are built to handle specific development aspects of an application (source)

模型-视图-控制器(MVC)是一种体系结构模式,它将应用程序分为三个主要的逻辑组件-模型,视图和控制器。 这些组件中的每个组件都是为处理应用程序的特定开发方面而构建的( 源代码 )

MVC really simplifies things and is an important part of many major frameworks.

MVC确实简化了事情,并且是许多主要框架的重要组成部分。

处理数据库 (Dealing with Databases)

In the last 6 months, I haven’t written a single direct SQL database query. Yet I deal with databases everyday, even doing some complex operations. This is thanks to the ORM (Object Relational Mapper) that Ruby On Rails uses.

在过去的6个月中,我没有编写任何直接SQL数据库直接查询。 但是我每天都在处理数据库,甚至进行一些复杂的操作。 这要感谢Ruby On Rails使用的ORM(对象关系映射器)。

ORMs convert object-oriented programming language such as Ruby into database lingo in which to perform operations. Which makes data access more portable and abstracted from the required database queries that are necessary when manipulating data.

ORM将诸如Ruby之类的面向对象的编程语言转换为执行操作的数据库语言。 这使得数据访问更加可移植,并从处理数据时必需的必需数据库查询中抽象出来。

Thanks to ORM, it’s much much easier to query the database. This gives a big advantage to beginners, who can start writing applications without even knowing SQL.

感谢ORM,查询数据库要容易得多。 这为初学者提供了很大的优势 ,他们甚至可以在不了解SQL的情况下开始编写应用程序。

编写/使用REST API(应用程序编程接口) (Writing/Using REST APIs (Application Programming Interfaces))

APIs make it easier for one application to talk to another.

API使一个应用程序更易于与另一个应用程序进行通信。

APIs make some other applications’s functionalities easily accessible to our application. For example, I once developed a Road Trip Planner application that used the Google Maps API to show various places on a map that a user could visit on a particular route.

API使我们的应用程序可以轻松访问其他一些应用程序的功能。 例如,我曾经开发过一个Road Trip Planner应用程序,该应用程序使用Google Maps API在地图上显示用户可以在特定路线上访问的各个位置。

APIs can also be used to separate the front-end and the back-end completely. For example, we can write the back-end as an API-only Rails application that can be used by a web site, an Android/iOS application, or even some third party applications.

API也可以用于将前端和后端完全分开。 例如,我们可以将后端编写为仅API的Rails应用程序,供网站,Android / iOS应用程序甚至某些第三方应用程序使用。

使用ElasticSearch进行搜索 (Using ElasticSearch for searching)

Although I don’t know much about ElasticSearch so far, but I’ve learned that it’s a NOSQL, distributed full text database. It acts as a distributed search engine that is incredibly easy to scale and returns results at lightning speed.

尽管到目前为止我对ElasticSearch了解不多,但是我已经知道它是一个NOSQL分布式全文数据库。 它充当了分布式搜索引擎,它非常易于扩展,并以闪电般的速度返回结果。

Why would we need it for searching? Because having millions of records in a regular database can make it really complex to make efficient searches. With Elasticsearch, we can index the documents needed to be searched and it can perform queries across all those millions of documents and return accurate results in a fraction of a second.

为什么我们需要它进行搜索? 因为在常规数据库中拥有数百万条记录会使有效搜索变得非常复杂。 使用Elasticsearch,我们可以为需要搜索的文档建立索引,并且可以对所有数百万个文档执行查询,并在不到一秒钟的时间内返回准确的结果。

Elasticsearch has a Restful API, which makes it really easy to query the searches and get the results.

Elasticsearch具有一个Restful API,这使得查询查询和获取结果非常容易。

Here’s a tutorial that helped me, and here are some use cases of Elasticsearch.

是对我有帮助的教程 ,还有一些Elasticsearch的用例

使用异步/后台任务 (Using asynchronous/background tasks)

Sometimes the user will perform an action on our application that takes a considerable amount of time to complete. We don’t want the user to sit there waiting for this action to complete, so we send it off to a background worker.

有时,用户将对我们的应用程序执行操作,这需要花费大量时间才能完成。 我们不希望用户坐在那里等待该操作完成,因此我们将其发送给后台工作人员。

Here’s a link that explains it better.

这是一个可以对其进行更好解释的链接

In Ruby On Rails, I came across Sidekiq, which makes it easy to handle background tasks efficiently.

在Ruby On Rails中,我遇到了Sidekiq ,它使轻松高效地处理后台任务变得容易

Thanks for reading! If you found this article helpful, give me some claps. ?

谢谢阅读! 如果您发现本文有帮助,请给我一些鼓掌。 ?

There’s still a long way to go!

还有很长的路要走!

Check out my Github profile here.

在这里查看我的Github个人资料。

翻译自: https://www.freecodecamp.org/news/what-i-learned-from-my-first-ever-software-development-internship-701aa756a72f/

本科实习生软件开发一月工资

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值