比程序员更好的职业_三个使您成为更好的程序员的项目

比程序员更好的职业

有目的的选择 (A purposeful selection)

In this article, I’ve provided three projects which can improve your programming ability in the areas of web development, machine learning, and Android development.

在本文中,我提供了三个项目,这些项目可以提高您在Web开发,机器学习和Android开发领域的编程能力

These projects were not selected without careful thought.

没有仔细考虑就没有选择这些项目。

I consider them to be the most impactful projects I completed during my 4 years of studying computer science.

我认为它们是在学习计算机科学的4年中完成的最具影响力的项目

Impactful in terms of how much knowledge I gained compared to the time invested.

与获取的时间相比,我获得的知识数量具有影响力。

For each project, I have created some rough steps to follow. These are intended to serve as general guidance rather than hard rules.

对于每个项目,我都创建了一些粗略的步骤。 这些旨在用作一般指导而非硬性规定。

I encourage you to take these projects as a starting point and expand on them with your own ideas.

我鼓励您以这些项目为起点,并用自己的想法对其进行扩展。

Remember to be creative and have fun with your code!

记住要有创造力,并喜欢您的代码!

“The computer programmer is a creator of universes for which he alone is the lawgiver.” ― Joseph Weizenbaum

“计算机程序员是宇宙的创造者,他一个人就是宇宙的创造者。” ― 约瑟夫·魏岑鲍姆

我们为什么要使用项目来学习? (Why should we use projects to learn?)

It may be argued that some university teaching styles are starting to show their age.

可以说有些大学的教学风格已经开始显示其年龄。

In particular, those which require you to slog through tens of hours of rigorous lecture material such that you may regurgitate it in time for a final exam.

尤其是那些需要您花费数十小时的严格讲课材料,以便您可以及时反省以进行期末考试的课程。

At best these are tedious and ineffective. In the worst case, they can be demoralising, and overwhelming

这些充其量是乏味且无效的。 在最坏的情况下,它们可能使人士气低落,使人压倒

From personal experience, I find that after an exam, I forget most of the material in a matter of days.

从个人经验来看,我发现考试后,几天之内就忘记了大部分材料。

I cannot retain it because I do not continue to practise it.

我不能保留它,因为我不会继续练习它。

So why am I talking about university teaching styles?

那我为什么要谈论大学的教学风格呢?

Because there is one which shines far above the rest — one which we can learn a great deal from.

因为有一个比其他的要闪耀得多-我们可以从中学到很多。

The take-home assignment.

带回家的作业。

Assignments are naturally suited to practical subjects, in particular those which involve some form of programming.

作业自然适合于实际学科,特别是涉及某种形式编程的学科。

In order to complete them properly, you need a thorough grasp of the underlying principles upon which they are based.

为了正确完成它们,您需要彻底了解它们所基于的基本原理。

But you do not need to be an expert before starting.

但是开始之前您不需要成为专家。

Whenever I am working on a programming assignment, my workflow is as follows:

每当我从事编程工作时,我的工作流程如下:

  1. Prioritise a task to complete.

    优先完成任务。
  2. Define what I need to know in order to complete the task.

    定义我需要知道的内容才能完成任务。
  3. Research and learn.

    研究和学习。
  4. Complete task.

    完成任务。
  5. Repeat steps 1–4 until the assignment is complete.

    重复步骤1-4,直到分配完成。

Define. Research. Apply.

定义。 研究。 应用。

Over several weeks, I am iteratively building on top of my previous knowledge by breaking down my tasks into bite-sized chunks.

在过去的几周中,我将自己的任务分解成一口大小的块,从而在以前的知识基础上进行迭代。

This process of defining what you need to know, acquiring the knowledge, and then applying it, is what makes completing assignments so effective.

定义所需知识,获取知识然后加以应用的过程使完成作业如此有效。

It’s exactly the process I use when I’m developing a project, be it for fun or for work. I’ve found it to be the fastest and most enjoyable method for progressing as a developer.

这正是我在开发项目时使用的过程,无论是娱乐还是工作。 我发现它是发展成为开发人员时最快,最有趣的方法。

No matter your skill level, the process stays the same.

无论您的技能水平如何,过程都保持不变。

实时聊天应用程序-Web开发 (Realtime chat app — web development)

Image for post
Gif of a realtime chat app. Created by Author.
实时聊天应用的Gif。 由作者创建。

This is an awesome project that will give beginners a deep-dive into both front-end and back-end development.

这是一个很棒的项目,它将使初学者深入了解前端和后端开发。

For the more experienced developer, it offers the chance to experiment with new technologies and perhaps learn a new framework or two.

对于经验丰富的开发人员,它提供了尝试新技术并可能学习一两个新框架的机会。

While there are many ways to implement a realtime chat application, the core architecture will not vary much.

尽管有很多方法可以实现实时聊天应用程序,但核心体系结构不会有太大变化。

You can pick and choose which of the subcomponents to implement based on your skill level and learning priority.

您可以根据自己的技能水平和学习优先级来选择要实施的子组件

1.身份验证API (1. Authentication API)

Building an authentication layer for your application is a great excuse to learn a modern strategy such as OAuth 2.0.

为您的应用程序构建身份验证层是学习诸如OAuth 2.0之类的现代策略的绝佳借口。

You can create a custom sign-up flow or use an existing implementation such as Google or Facebook.

您可以创建自定义注册流程,也可以使用现有的实施(例如Google或Facebook)。

2.数据存储 (2. Datastore)

You’ll need a data store to persist messages and user info. There’s a wide range of databases to choose from. You can take this opportunity to try a new one.

您将需要一个数据存储来保留消息和用户信息。 有各种各样的数据库可供选择。 您可以借此机会尝试一个新的机会。

3. Websocket API (3. Websocket API)

Websockets allow for low latency communication between the client and the server. You can use a framework such as socket.io to achieve lightning-fast communication.

Websocket允许客户端和服务器之间的低延迟通信。 您可以使用socket.io之类的框架来实现快速的通信。

4.前端 (4. Front-end)

The complexity of the front-end can be easily scaled based on your experience level.

可以根据您的经验水平轻松扩展前端的复杂性。

If you’re new to web development I recommend creating some static HTML pages and updating its content when a new message is created. You can do this with an AJAX request.

如果您不熟悉Web开发,建议创建一些静态HTML页面,并在创建新消息时更新其内容。 您可以使用AJAX请求执行此操作。

Alternatively, for a bigger challenge, you can implement the front-end with a modern framework such as React, or Vue.

另外,对于更大的挑战,您可以使用诸如React或Vue之类的现代框架来实现前端。

摘要 (Summary)

As you can see there are many possibilities with this project. I guarantee you’ll learn something new if you try to build it.

如您所见,此项目有很多可能性。 如果您尝试构建它,我保证您会学到一些新东西。

It helped me to land my first internship in 2019.

它帮助我在2019年获得了第一次实习机会。

I still use the technologies and concepts I learned to this day.

我仍然使用到今天为止学到的技术和概念。

文本分类器,神经网络-机器学习 (Text classifier, neural network — machine learning)

Image for post
Gif of a neural network being trained. Created by Author.
正在训练的神经网络的Gif。 由作者创建。

Text classification is the process of assigning categories to unstructured text. For example, we can analyse a corpus of news articles to determine sentiment or genre.

文本分类是将类别分配给非结构化文本的过程。 例如,我们可以分析新闻文章的语料库以确定情感或体裁。

There are many great machine learning libraries available in Python. I can recommend the following from personal use: scikit-learn, TensorFlow, Keras, and Pytorch.

Python提供了许多很棒的机器学习库。 我可以推荐从个人使用以下命令: scikit学习TensorFlowKerasPytorch

For each of the following tasks, you can use a library for quick completion, or challenge yourself to manually implement them.

对于以下每个任务,您可以使用库来快速完成任务,也可以挑战自己手动实施它们。

1.数据预处理 (1. Data pre-processing)

The first step to any machine learning task is to pre-process your data to suit the needs of your model.

机器学习任务的第一步是预处理数据以适合模型需求。

Typically data is split into three sets: training, testing, and evaluation. Each set should have a corresponding set of labels.

通常,数据分为三组:培训,测试和评估。 每组应具有一组对应的标签。

In text-processing, we can define a set of stop words — common words (e.g ‘a’, ‘in’, ‘the’) which we want our network to ignore.

在文本处理中,我们可以定义一组停用词 ,即我们希望网络忽略的常用词(例如“ a”,“ in”,“ the”)。

Additionally, we want to convert the data into a format our model can understand. A common technique is to use one-hot vectors.

此外,我们希望将数据转换为模型可以理解的格式。 一种常见的技术是使用单热矢量

3.选择一个目标函数 (3. Choose an objective function)

An objective function is something that your model optimises during the training process. We want to select a suitable objective function for our data.

目标函数是模型在训练过程中优化的。 我们想为我们的数据选择一个合适的目标函数。

A common function to use is the cross-entropy loss between two or more classes.

常用的函数是两个或多个类之间的交叉熵损失

3.定义网络架构 (3. Define network architecture)

A feed-forward neural network with one input layer and one output later is the simplest type of network. You can experiment with adding more layers and changing the number of neurons in each layer.

具有一个输入层和一个稍后输出的前馈神经网络是最简单的网络类型。 您可以尝试添加更多层并更改每一层中神经元的数量。

4.火车模型 (4. Train model)

Train the model using an optimisation algorithm such as stochastic gradient descent.

使用诸如随机梯度下降的优化算法训练模型。

Make sure to only train your model using the training data, otherwise, you’ll get skewed results.

确保仅使用训练数据来训练模型,否则,将得到不正确的结果。

5.评估表现 (5. Evaluate performance)

Evaluate your model's performance on the test data set by calculating metrics such as accuracy, precision, and f1-score.

通过计算准确性,精度和f1分数等指标,评估模型在测试数据集上的性能。

You can plot the learning history of your algorithm to further understand what is happening.

您可以绘制算法的学习历史记录,以进一步了解正在发生的事情。

摘要 (Summary)

Using a library such as Keras will allow you to achieve all of the above steps in a relatively short amount of time. It’s a great way to quickly improve your knowledge of machine learning techniques.

使用Keras之类的库可以使您在相对较短的时间内完成上述所有步骤。 这是快速提高您对机器学习技术知识的一种好方法。

You can take these general steps and apply them to other data sets that you find online — Get creative!

您可以采取这些常规步骤,并将其应用于在线找到的其他数据集-发挥创意!

If you’re wanting to obtain a more thorough understanding of the inner workings, I recommend you try to complete these tasks without the assistance of a library.

如果您想更深入地了解内部工作原理,建议您在没有库帮助的情况下尝试完成这些任务。

Having done this for university, I will warn you…it can be very frustrating. But stick with it, you’ll learn a lot.

大学毕业后,我会警告您……这可能非常令人沮丧。 但是坚持下去,您会学到很多东西。

具有位置跟踪功能的照片库-Android应用 (Photo gallery with location tracking — Android app)

Image for post
Gif of an image gallery app. Created by Author.
图片库应用的Gif。 由作者创建。

Building a photo gallery is a fantastic way to get started with Android. This was one of the most enjoyable projects I completed during university.

建立照相馆是开始使用Android的绝佳方式。 这是我在大学期间完成的最有趣的项目之一。

Once you start brainstorming, you’ll quickly see that the possibilities are endless. Here are a few steps to get you started.

一旦开始集思广益,您将很快发现无限可能。 这里有一些步骤可以帮助您入门。

1.查看图像的布局 (1. Layouts to view images)

Layouts in Android are created using XML. You can experiment with different layouts for displaying photos in your app.

Android中的布局是使用XML创建的。 您可以尝试使用不同的布局来在应用程序中显示照片。

You might create a grid and allow for the number of columns to be altered with a pinch gesture.

您可能会创建一个网格,并允许使用捏合手势更改列数。

2.上传图片 (2. Upload Image)

You’ll want a way to capture images from the phone’s camera. A simple library to do this with is EasyImage.

您需要一种从手机的摄像头捕获图像的方法。 一个简单的库就是EasyImage

3.位置信息 (3. Location Information)

When a photo is taken, you can use a Location Service to retrieve the last known location of the device.

拍照后,您可以使用定位服务来检索设备的最后已知位置。

4.数据存储 (4. Datastore)

In order to store images and their location, you’ll need a way to persist data in the app. Android provides a wrapper over SQLite called ‘Room’.

为了存储图像及其位置,您需要一种将数据保留在应用程序中的方法。 Android为SQLite提供了称为“ Room”的包装。

The Android documentation highly recommends using Room, to store data locally, as opposed to using SQLite directly.

Android文档强烈建议您使用Room来在本地存储数据,而不是直接使用SQLite。

5. Mapview (5. Mapview)

Once you have images and location stored, you can create a map-view layout using the Google Maps SDK.

存储图像和位置后,您可以使用Google Maps SDK创建地图视图布局。

Place a pin for each location and make it clickable to show the associated image(s).

在每个位置放置一个图钉,使其可单击以显示关联的图像。

摘要 (Summary)

I used the skills I gained from this project to launch my own app to the Google Play Store. This now generates a small but satisfying amount of passive income every month.

我使用从该项目中获得的技能来将自己的应用程序启动到Google Play商店。 现在,这每月产生少量但令人满意的被动收入。

If developing for Android doesn’t interest you then you could try developing this project for another platform.

如果对Android开发不感兴趣,则可以尝试为其他平台开发该项目。

Developing for iOS requires macOS. If you don't have a Mac already this can be a hefty entry fee.

为iOS开发需要macOS。 如果您还没有Mac,这可能是一笔不菲的入门费。

Alternatively, you could try using react-native or flutter to implement it as a cross-platform application. This is something I’ve been keen to try out for a while.

另外,您可以尝试使用react-native或flutter将其实现为跨平台应用程序。 这是我一直渴望尝试的一件事。

结语 (Wrapping Up)

Getting your hands dirty with a project is the fastest way to progress as a developer.

使您的项目变得肮脏是成为开发人员的最快方式。

The more you practise the process of defining, researching, and applying, the quicker you will improve.

您在定义,研究和应用过程中进行的练习越多您的改进就会越快。

If you are inspired to build any of the projects, I’d love to hear about your experience and whether or not they were effective for you.

如果您有灵感来构建任何项目,我很想听听您的经验以及它们是否对您有效。

Thank you for reading 🙏

谢谢您阅读🙏

翻译自: https://medium.com/the-dev-café/three-projects-to-make-you-a-better-programmer-65903e53620a

比程序员更好的职业

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值