開源日報 每天推薦一個 GitHub 優質開源項目和一篇精選英文科技或編程文章原文,堅持閱讀《開源日報》,保持每日學習的好習慣。
今日推薦開源項目:《百度網盤 BaiduPCS-Go》
今日推薦英文原文:《What They Don』t Tell You in College About Being a Software Developer》

今日推薦開源項目:《百度網盤 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

(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/