开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
今日推荐开源项目:《百度网盘 BaiduPCS-Go》
今日推荐英文原文:《What They Don’t Tell You in College About Being a Software Developer》
开源日报第712期:《百度网盘 BaiduPCS-Go》
今日推荐开源项目:《百度网盘 BaiduPCS-Go》传送门:GitHub链接
推荐理由:用 Go 语言编写的百度网盘,打开终端,这次我们换一个网盘的打开方式吧,没准还能快一点呢。
今日推荐英文原文:《What They Don’t Tell You in College About Being a Software Developer》 作者:Steven Popovich
原文链接:https://medium.com/better-programming/what-no-dont-tell-you-in-college-about-being-a-software-developer-cda2d3f581bc
推荐理由:大学给了我们时间,当然,它并没有教会我们全部。

What They Don’t Tell You in College About Being a Software Developer

College doesn’t prepare you for everything in software development

开源日报第712期:《百度网盘 BaiduPCS-Go》
(Photo by Georgie Cobbs on Unsplash)
So, you just graduated college and you landed your first software engineering job. Congratulations!

Or, maybe you are still in college studying software. Yeah, it sucks, but keep going; it’s valuable.

Or, maybe you are thinking about a career switch to writing software. I get it, it is a nice field to be in.

If you are in any of these boats, I want to impart some of my experiences and what I have learned in my first eight months of writing software.

Focusing 40 Hours a Week Indefinitely Is an Adjustment

College is inherently a fairly scattered-brain thing. You are managing different classes on different topics, different groups, maybe a job, and extra-curriculars.

Full-time work is not. You still have some variety in what you do, but you have one title at one company (probably). And in a lot of ways, it is really nice to have just one thing to focus on.

But in other ways, it is harder. You have to sit down and focus 40 hours a week. Every week. No more attempting homework then texting your buddy for help. You can’t blow off assignments because you got a high grade on the last test.

You can socialize at work, but you can’t invite your buddy over to work on the project and end up cracking open some beers. You have to focus for long periods of time, especially in our field.

It can be exhausting. Especially when you are new and you don’t know what you are doing.

I mean, look, you get time off and you have lunch and water cooler talk, but it is not like college. I graduated in engineering without ever focusing for 40 hours in a week, I can tell you that. Well, at least not multiple weeks in a row.

It is different. And it is hard. To be honest, I still don’t like it. I am used to it, but some weeks are harder than others.

Sometimes, at 4:30 or 5:00, I’ve just got to stand up and shoot the shit with someone. I can (and do) work more than 40 hours a week, but it just isn’t easy.

Maybe 40 hours a week is too much?

You Have to Adopt a Need-to-Nerd Attitude

You don’t know shit. I don’t know shit. I thought I knew shit. I realized I didn’t know shit.

You will be given projects and tasks that you don’t know how to do. You will have never done anything like it before.

You will have to learn about the framework. You will have to learn about how (or if) your company has approached this problem in the past. You get the point.

The bottom line is: Employed engineers learn. Good engineers learn.

Given a task to improve the battery performance of your app? Better learn how to see what in your app is taking up so much battery. Google it. Reference a textbook. Ask coworkers. Ask Stack Overflow. Take ownership of your task and learn how to do a good job of it.

See, in college, you are given what to learn. You are given the pages to read. You learn facts but you don’t get to make truly critical analyses.

In software, you have to constantly make objective analyses about what the best way to solve a problem is. You have to learn about the domain of the problem. You have to do more than just complete the assignment. It is a holistic process that isn’t emulated well outside of the real world.

But you can’t learn everything. Ever try to read a textbook cover to cover? I have. I was trying to learn everything about a platform I was working on. It didn’t work. I didn’t retain anything. It wasn’t directly relevant to what I was doing day-to-day and I wasn’t applying what I was reading.

You don’t need to learn everything, but you do need to learn about the code you are working on. You need to learn frameworks, languages, and patterns on a need-to-nerd basis.

College Is Hard, but So Is Writing Good Software.

I really thought writing code would be so fun all the time. And it is fun most of the time. But as I learn more about writing code that scales, clean code, architecture, and writing code that other people can work on, I realize there is a lot to learn. And a lot to practice.

To write good code, you need to focus. You have to learn about the language you are working in. You have to rewrite and refactor code. You have to be critiqued by your co-workers. You will get better, but writing good code is hard work.

The bottom line is that you work for a business and businesses need to make money. They do this by (most likely) providing distributed software systems to thousands of users. Systems with lots of features. With codebases that grow over years.

Large codebases are hard to work on, they just are. No matter how well they are written. And extending them in a cohesive way is inherently difficult and takes years of practice to do effectively.

It’s worth it though! I don’t want to sound negative. I love my job. I love what I do and where I work. Seeing a beautiful, well-formed system function at scale is a great feeling and is part of the reason we got into the field in the first place.

Ask Every Question. And Don’t Be Afraid to Pair

I came into my first real engineering job with some experience. I had written code that made it into production in a couple of different internships and contracts. I knew I was coming into a new domain, but I wanted to figure things out for myself. But boy, I was missing out.

I severely underestimated the value of being surrounded by engineers that are better than me. They have forgotten more things about programming than you know. Use these resources.

Now there is a balance to be struck. There is huge value in figuring things out for yourself. You have to sit down and do things yourself to learn. But after a half-hour of banging your head against the wall, ask for help and pair.

Having someone write code next to you does not make you a bad developer. There is actually a lot of research that shows pair-programming can be beneficial to both programmers, lead to better code, and is faster than working by yourself. Here is a nice report that I really like.

In the same vein, as you learn more about the system you are working on or learn new languages, you will have questions. A lot of them.

Use your best judgment about who to ask, be polite and ask, ask, and ask. It can only help you. Looking dumb does not exist when you complete tasks because you are asking the right questions.

Every single engineer asks questions. It is part of our job. We question what is the right way to do something every day. It is how quality software is written.

You Have to Practice Everything

Full-time work allows you to focus on one thing for the first time in your life. You might have a couple of different projects at work, or meetings, but you have one job to get better at. You have sole responsibility.

It is a far cry from taking five different classes, being in two clubs, and being a part of three different workgroups. Not to mention three of your classes are in history, art, and public speaking, for some reason.

Being in the same place every day makes your shortcomings more transparent to yourself.

Maybe you don’t like working in groups. Many programmers don’t. It’s OK.

Maybe you don’t respond to email or Slack very well. I just want to code.

Maybe you don’t participate in meetings. I get it, meetings are boring.

But you realize these things with repetition. And like writing code, you have to practice the soft things. You can get better at communication, listening, participation, timeliness, initiative, whatever! And you should.

Take notes about yourself in a meeting. For regular meetings, think about what you can do beforehand to make the meetings go faster for everyone. Jot down things to bring up later in water cooler conversations, like your co-worker’s new dog or their new apartment.

Being a software developer is more than writing code. You have to be a teammate too. I have seen myself try to and succeed at getting better at being a teammate. I just needed to practice.

Time Moves Faster and Habits Are Critical

This is a weird one. People say time moves faster when you get older, but I think time moves faster when you work full time. I am also not that old, I guess.

I think it comes from your reference and timeline shifting significantly. All of a sudden, it’s not the test coming up in a week, it’s when your lease ends in three months. It’s the deadline you have to meet in a month.

You think about the rest of your life more instead of one semester at a time. You think about your company’s indefinite future. It changes your perspective quickly.

I mean, in college, all I planned for was finishing and getting a job. That’s four or five years, max. Then, all of a sudden, you get a full-time job and you start thinking about retirement, why are all your friends getting married, why can’t you grow a beard yet…I digress.

The point is, the phenomenon of time moving faster is true. And to that point, I think the formation of habits becomes more critical.

For possibly the first time in your life, you have an indefinite structure. The same schedule almost every day. This is a great opportunity to build good habits, like exercising or packing healthy lunches.

It is important to start with good habits sooner rather than later. It can be so easy to fall into bad habits.

Starting full-time work is a great time to stop exercising. It is the time in life where people start to gain weight. Turns out it isn’t just because you are getting older.

Thanks

Thanks for reading! I hope you take some of these to heart. I love my job. Continue working for that full-time job, it is worth it!


下载开源日报APP:https://openingsource.org/2579/
加入我们:https://openingsource.org/about/join/
关注我们:https://openingsource.org/about/love/