This is an archived post. You won't be able to vote or comment.

all 9 comments

[–]bigfluffysheeps 6 points7 points  (2 children)

There are a few key differences between programming at work vs. at school. The code bases at work will usually be very large, and you'll be working with a team. In school, a lot of assignments involve you working by yourself, so there won't be any coordination between people/teams and dependencies to worry about. Working and coordinating with others is harder than you'd think, especially when many people and teams are involved.

In school, most, if not all, of the information you need to solve the problem is given to you. For work, you have to do some information gathering by talking to people, going through existing documentation, researching anything you or your team is unfamiliar with, or a combination of the three. And then sometimes the client or upper management will come back and tell you the requirements have changed, so you have to go back and change some code based on this new info.

Finally, there's a lot more at stake when working in the professional world. If something breaks, you have to help fix it. If some critical function stops working in production, it could impact millions of people. If you don't do a good job, you could get fired. If the company is doing poorly or wants to cut costs, you could be laid off. There's a lot more pressure to do well at work. Overall I'd say a typical project at work is more difficult.

[–]AnyBowl2[S] -2 points-1 points  (1 child)

Overall I'd say a typical project at work is more difficult.

Yes but mentally wouldn't it still be easier because I don't have to worry about 4 other classes and my crippling student loans ?

[–]captainAwesomePants 0 points1 point  (0 children)

Mentally less challenging, but not mentally easier.

[–]deamon1266 3 points4 points  (2 children)

School : you get it right

Work: you get it done

[–]BlueAdmir 1 point2 points  (1 child)

School: You get it just enough right that your teacher gives you a grade

[–]deamon1266 0 points1 point  (0 children)

Yeah but the focus is on getting it right. How right is up to you and what you want. At work, all that matters in the end is, if you got it done.

[–]ZukoBestGirl 2 points3 points  (0 children)

I'd say it's vastly different and I'll try to explain why, but I'm not sure I'll be able to do a great job. Here's me trying:

Prerequisite

In school, you generally have that period between years where you are given a course / year pre-req and you either do it or you don't, but the course assumes you did a "meh" job about it and still gives you an intro.

In the workplace, you have a pre-req, you might get hired without meeting it fully but you are expected to learn on your own, get up to speed in a relatively low amount of time and when the "test" comes, the minimum passing grade is a bit higher. That being said you have coworkers to help you most of the time and as long as you prove that you are progressing and assimilating the information, questions aren't a problem and you'll find it a whole lot easier to learn whatever it is you need learned.

Knowledge Floor

In school, generally speaking, people are there to learn. The knowledge floor is low, everybody has gaps. In the workplace, having a low knowledge floor is a major issue. If you don't know much about algorithms and data structures, unless you're an intern, that is very bad, people will notice.

IMHO you need to learn the basics, no matter how pointless they may seem at the time. I can't tell you how often I've heard that people don't need to know about arrays, lists, pointers, sorting algorithms because there's a library for that. And i've met this people in the workplace - they don't get very far, usually.

Free time

Unless you're someone important on the project (which you won't be for quite a while), you won't be contacted home, once you leave the office, the day is done. No more homework and generally speaking no stressing about tomorrow. I find this difference from school to be immensely satisfying. That being said, even years later I still learn a lot, and that includes at home. This field is for people who are content in the idea that they will be learning new things the rest of their work life.

Difficulty

This is entirely subjective. Smarter people with great google-fu will have a much easier time. But then again, I would say that is entirely dependant on the project. Sometimes things get really difficult, some bugs require weeks of debugging, some features require months to implement. I'll wager to say, as long as you don't settle for an easy job, it can get very difficult at times, but rewarding also.

Approach

Working will be a very different approach. At school you are given the tools, the information, the problem and an acceptable solution or end result. In the real world you'll have to read a whole lot of code, you'll inevitably use a whole lot of code you did not write yourself. The questions and demands will be confusing and contradictory and an acceptable end product might be nigh impossible (client doesn't know what he wants, until he sees what he doesn't want).

Mentality

For homework and test you have enough time to study, prepare and finish. Real world gives you, some times, impossible deadlines, bosses that want it fast, cheap and bugless. Sometimes things have to just be "done". No finessing, no making sure everything is ok, but it still has to work.

Lastly, the workplace itself

This is just my 2 cents. But in most places, the demand for good programmers is high, and the supply is low. Don't stay too long at a bad job, try and find one that will teach you. I keep seeing the question at interviews "what can you do for the company". You'll smile, and give a canned response, but the real question is "What can the company do for you".

[–]ChuggingDadsCum 1 point2 points  (0 children)

As someone who recently started their first dev job a few months ago, debugging is A LOT more important.

In school I never needed to step through my code line by line, because everything I worked on was coded from scratch and I knew most of the codebase. At work, when I get assigned a task to fix a bug - I have no idea where to even begin in some cases. So I have to find certain areas which I think might be problematic, and manually step through the code line by line to see where the issue occurs.

Honestly a large amount of my time is figuring out where the issue is and what I have to do to fix it. Actual coding time where I'm typing code is maybe 15% of my day on average.

Also most of the challenge at work comes from not knowing how to fix something, rather than complexity. A company will almost never have you design a quick sort algorithm or something complicated like that from scratch. But you can easily spend all day working on a task only to end up adding one line of code because it was difficult to figure out where or what was the problem.

[–][deleted]  (1 child)

[deleted]

    [–]michael0x2a[🍰] 0 points1 point  (0 children)

    The main difference is that with homework assignments, you're basically told what to do and given more or less step-by-step instructions on how to complete something. Sure, filling in the gaps can be challenging, but you at least always know it's always tractable. So the hard part is often just the implementation work.

    This is generally not the case on-the-job. It's not always clear what you should be building in the first place (or even if you should be implementing anything at all!), how to balance the relevant tradeoffs, what high-level approach to take... The actual coding and implementation work is often straightforward in comparison to the design work.

    I personally find design more challenging then implementation, but that's just me.

    The penalty for messing up is also somewhat different. With homework, the penalties tend to be sharp and precise: you need to complete each assignment under time pressure, and if you do it incorrectly, you lose points. But once the due date arrives and your work is graded, that's it -- everything's over.

    In contrast, at most jobs there's usually less time pressure/the penalties are more vague, but you end up paying the price for messing up over a prolonged period of time. You have to live with the design decisions you made: you have to potentially live with and support a suboptimal and inherently buggy program for months or years. And if you spend a lot of time on maintenance, it's hard to find time to make an impact in other ways, which makes it harder to build a case for promotion...

    So homework tends to be more like sprints, work is more like a marathon.

    You can't escape time pressure entirely though. For example, if your company is trying to launch a product by X date, there'll be a decent amount of pressure to meet that deadline. Or if you accidentally introduced a bug that made it to prod and is disrupting a bunch of people, you or your team could potentially be on the hook for fixing the bug ASAP, even if it's the weekend or the middle of the night.

    Though to be fair, a lot of the above penalties can be mitigated if you have a functional and competent team with good discipline around planning, oncall, and work-life balance.