Ask HN: Tips for students before starting their first job
Which advice did/would have helped you landing your first job after university? And whats your best tip for life in general?
Which advice did/would have helped you landing your first job after university? And whats your best tip for life in general?
When someone asks for information, rather than try to answer immediately, or rush to research, ask, "When do you need that by?" Even if they tell you it's urgent, it causes them to consider.
"Sure, I'd be glad to. Just let my boss know you need me." If they hem and haw, be suspicious.
"What budget is that coming out of?"
Other useful tidbits: Politics is a euphemism for, someone's ego will otherwise get hurt. Tangentially, your ego isn't you. Don't let it getting hurt affect your thinking.
Most people are naturally good; the one's who aren't work hard to position themselves in a position handling communications. So be careful to route communications as directly as allowed, and regularly check what's incoming.
Faith is blind, trust is earned.
I'm really curious what you mean by this, "a position handling communications"?
For me lately the 'Just let my boss know' works really well, let them hammer out the details.
1) Take copious notes (in whatever format works for you).
2) Confirm managers decisions with a recap email (especially when you disagree with them).
3) Understand that while you may not like politics (I don't) knowing how the game is played allows you to mostly stay out of it.
4) Work time is work time, learn to be productive and then go home and switch off.
5) Work friends are NOT friends.
6) Learn to say 'No' in a way that doesn't ruffle feathers but does result in the no case.
7) If something seems interesting, go for it - all the best experiences in my working life have resulted from stepping outside my comfort zone.
> Work friends are NOT friends.
This is very hard for people to learn, including me, but it will make you much happier.
And, I'd add something that someone else said:
8) The most important determiner of how happy you are is your choice of life partner.
When you are young and in your first real job my experience is your best friends often are work friends. It's pretty natural to do things outside of work with the same people you really enjoy working with.
Documentation is always key. And notes about experiences is also important. Check on this one.
> 2) Confirm managers decisions with a recap email (especially when you disagree with them).
This is always important. I discussed a lot to with people in higher ranks than me to find for the perfect fit for a project. Check on this one.
> 3) Understand that while you may not like politics (I don't) knowing how the game is played allows you to mostly stay out of it.
Yeah I stay in the mainstream part, and just vote if there is something to vote on. But it is just a decade where keeping up with politics will just drive you nuts.
> 4) Work time is work time, learn to be productive and then go home and switch off.
That's something I really need to learn. For me it is really hard to switch off my head.
> 5) Work friends are NOT friends.
Always true. I mean you can meet with them for lunch etc., but it will always be about work.
> 6) Learn to say 'No' in a way that doesn't ruffle feathers but does result in the no case.
Also know your weaknesses and don't lie about them. This will save a lot of nerves.
> 7) If something seems interesting, go for it - all the best experiences in my working life have resulted from stepping outside my comfort zone.
Also something I need to learn. For me it is really hard to step out of my comfort zone.
Find a hobby that requires focus but isn't your day job.
If you are focussing on rebuilding a motorcycle you aren't worrying about that project that is going to go late because the stakeholder is MIA or is present and their intelligence is MIA.
For me it's Motorcycles, Cycling, Chess and Reading but for you it could be painting, woodwork whatever - if you are a developer try to pick something away from a screen or that has screen work be the ancillary part - there is a therapy in sitting outside on a sunny day working on a bike that I can't find anywhere else.
I have made some extremely good friends through work, including the individual who, outside my family, is the person who I still see that I have known the longest in my life (we started our new jobs at the same company on the same day, approx 35 years ago).
The mistake is when your colleagues become your only friends. Changing jobs can see you lose your entire 'support network'. Always take the time to maintain friends outside your current work.
I have a wild tinfoil hat conspiracy theory that all corporate social events and activities are designed to foster this kind of 'support network' to discourage employees from leaving. I wondered why so many people stayed away from those when I started my first job.
Here's an important corollary:
Don't shit where you eat.
https://en.wiktionary.org/wiki/don%27t_shit_where_you_eat
That is, avoid getting into romantic relationships with people at work. And for God's sake don't think of work as a cruising ground for members of the appropriate sex(es).
Sure, there's a chance both of you might simultaneously be two of the lucky ones for whom everything always goes perfectly, without any hitches or conflicts. But back in the real world, relationships have problems, and jobs have problems, and when one of those problems inevitably occurs in one domain, it sucks if it dominos over into the other domain.
In the ideal world, we'd all be eternally happy with our personal relationships, and eternally happy with our jobs. But if you suddenly become unhappy with one for some reason, it really sucks if you also lose the other because of it.
And also remember what Freewheelin' Franklin of the Fabulous Furry Freak Brothers said:
"Dope will get you through times of no money better than money will get you through times of no dope."
https://pbs.twimg.com/media/ETBgAc0WoAEEZMF.jpg
https://en.wikipedia.org/wiki/The_Fabulous_Furry_Freak_Broth...
I honestly think there's a huge amount of survivor bias in this mindset. I'm in my thirties and I know more married couples who met at work than those who didn't meet at work. And the ones who didn't meet at work met at school. Even had two senior managers at my first job break up their marriages (both with kids) to get together. As far as I know they got married and are still happily together.
I think you just hear a lot more of the wild stories of the ones that go wrong.
Of course, it’s probably not terrible advice to tell everyone in a breakup to treat their soon-to-be ex as if they will one day be your manager. It’s just not likely that everyone will be able to follow through.
So I'd say it depends; just go into it knowing making the friends isn't the same as when you're in school.
If I would make a friend among co-workers, surely it would not end if any of us switch jobs? As in ex-student friends. Put in another way if you lose your friends from changing jobs they were not your friends.
The original post is a great example of why it’s dangerous to ask for advice on the internet. It often(not always) trends towards heavy handed and extreme views. But in real life, extreme views and stances are rarely the right course of action.
If you are working among people you trust, then this is all the better for learning an effective communication style, including saying 'no' or standing your ground. It's a safer environment than you will encounter later.
In my experience, 'nice' and 'not guarded' people in modern academia might only be like that because they are confident that they have enough power to get their way if you hit a point of disagreement. So, it's not always a good thing for you.
This is just my take. I can say for sure that trying to learn about office politics would have been a terrible way for me to spend my time at 19. YMMV.
This will sound snarky given the context, but my best tip is to stop looking for personalized advice for common problems.
You haven’t given enough details to for anyone to seriously tailor their advice to you. So it’s just going to be generic. And if you’re willing to go with generic, you can do better than what fits into a comment on HN.
You could get the same advice much faster by googling the same question and looking at threads. You could find authors that seem respected and find out what they say about the matter.
If you’re going to go for personalized, share as much as you can. Fit as many details as you can while still keeping it organized. If your question is worth asking, ask it all the way.
And, this applies a ton in programming. You’ll be much faster if you learn to do as much as you can pulling from resources, and then pushing a great question when you need to.
- Be willing to move. During the great recession a lot of my buddies wanted to stay near home and it hurt them a lot. I moved across the country and have been the better for it.
- Be thoughtful about your partner/spouse choices. I married admittedly younger than most do now but your long term partners/spouse will have a huge impact on things like work and where you live. Make sure those are aligned well.
- Don't lie on your resume but don't be shy either.
- Work on your network as much as you can. Hiring is still a networking game no matter how much we wish it weren't. People like to hire people they know.
- Stay out of debt! I spent the first couple years paying off bad college credit card mistakes.
- Start an emergency fund. I would say at least $1000 but calibrate for where you live.
- You're probably living as cheap as you will ever live. Stay that way as long as you can. Don't be too eager to get rid of roommates or upgrade lifestyle any faster than absolutely necessary.
- Start a good routine of exercising and eating right. It only gets harder later and time is not forgiving for putting it off.
- Start being thoughtful about what you have on social media. This will depend on where you work, live, and want to do but give your last few years of online life a good pass and consider purging anything that doesn't represent who you are now.
- Takes courses on ethics, philosophy, speech, and other things that help you to think clearly and speak confidently.
- Softskill are important, learn how to explain technical problems to non technical people. Try explaining CI/CD pipelines to your non tech friends and see if they understand.
- don't focus on tech all the time, try to understand why people around you are pushing for certain things that "don't make sense" ( there is usually a valid business reason).
- collaborate, don't say no, say "yes but here are the impacts" (it is not up to you/me/or a single person other than the CEO, to know if it is worth it to invest 2 months in what seems like a useless task).
Stick to the 50/30/20 rule: When paid, put 50% into an account for bills, 30% into a savings account, and 20% into an account for spending. Setup auto-billing and never touch bills and savings accounts. Live on less than 50% income and let the extra money in bills account roll over as additional savings.
Once you’ve saved one year’s living expenses, invest new savings into an index fund. Saving one year’s living expenses should only take 1-2 years if you’re living on 50% or less of income and saving 30%.
If you stick to 50/30/20 and grow your income, by the time your 30 you’ll have at least $250k if you only earn $60k, but probably over $1,000,000 if you increase your earnings over that time.
If you start planning now you can retire by 35-40 just by working a job and being financially disciplined.
I could go into more detail with a financial plan, email me (in my profile) if you want more info.
He looses steam when you’re in the actual wealth building phase. Boogle head and other resources are better there. Tax law is hardest and for that it’s probably worth paying someone (once you have >$200k in assets).
My advice applies to whether one chooses to start a business or not.
After saving one year’s expenses as cash in the bank, where would you park savings for low-risk passive capital preservation? Cash gets destroyed by inflation. Bond yields are too low. The historical track record of 20 years in a good stock index is unbeatable, no matter what year you started.
Where do you keep your savings, right now?
Even if you focus on growing capital by starting a business (what The Millionaire Fastlane recommends), you still have to park the profit somewhere.
Also, I’m in cash and private equity, whatever that’s worth. Have never owned an index fund.
Instead, work to free yourself from needing that system at all. Then you don’t need a life of playing politics and keeping CYA emails from your manager.
So basically if you think your boss knows nothing, got there by luck and you are finding everything they do irritates you; it’s you not them.
We could also talk about not getting too involved in general, work is work and you should have important things you’re interested in outside of what you are doing in exchange for money.
- sometimes, you are right, and you need to assert your opinion
- your confident boss might not know what they are doing,
- and getting involved with your work makes the work a lot more fun.
Also, it's much nicer to work with someone without an ego. Keeps the whole team happy.
It varies a bit by profession, but that sort of structure goes away very suddenly once your career starts. In some ways, that structure is already an illusion because many professions utterly ignore grades after only a few years of experience are added to a resume.
Initially, it is very liberating to not have another quiz, test, dissertation, or other deadline looming. Enjoy that reprieve.
People canny about doing excellent work and advancing their careers will soon notice that they have a relatively open feedback loop. They deliver work, someone accepts the work with little constructive criticism, and then they move on to the next bit of work. But was it 'A' work? We're there mistakes to be corrected? Was the work below average in quality? Was it overproduced?
Will your work get you the raises and promotions you want? The next job you want? Will it advance the goals of your team? Does it even give you decent job security? Typical companies will have annual or semiannual feedback processes, but that is like turning in all the homework, quizzes, tests, papers, etc., then only getting a semester report card for feedback. And only then finding out that your grader ignored homework and valued office hour participation highly this whole time.
What to do? Understand that it's your job to seek high quality feedback from whoever you can find. Peer reviews, mentors, your boss, your boss's boss, people who have the kinds of jobs you want, and so on. You might have to get out and network professionally to grow a set of people to help you in this way.
That means, to be excellent at your job and career, do not exclusively take direction from your immediate supervisor. Certainly be an excellent team member and keep your boss proud of you, but if you are only waiting around for the next assignment from the boss, you'll likely stunt your growth.
There is no set program for you to follow anymore. If you don't want to be wandering around blind, you need to do your own research and get your own feedback.
ADDENDUM: I guess I didn't say this explicitly. For the same reasons, it's also your job to make sure expectations are clear before starting an assignment, project, or other goal. Good bosses are good at this, but everyone has flaws and you want to thrive even under mediocre or poor management.
Agree. Not always of high quality, but also for "reality check". For example, you'll have to write a feedback tool yourself (i.e. for a B2B, private software that hundreds of people can use daily), so you get how the users value the product (typical star system with optional comments, etc).
You'll be tempted your first week to "clean up" the code you find there. Don't.
The question you should ask is not "how to make this more beautiful" but "how to bring in more value to the customer". Don't go on a refactoring crusade alone.
If you want to become a valued individual contributor try to understand the added value created by the product as much as you try to understand the codebase.
This will give you a good position to literally question the legacy code without being perceived as smartasserish.
That said, intuition and sensibility are your most important professional assets; you definitely want to nurture and listen to them. The feeling that code is "ugly" is often a signal that it hides surprising behaviors (bugs) or that changes involve more effort and risk than they should. Any software org you want to be part of does care about its ability to continue shipping working software. Protecting that capability is very much part of your job. Don't check in sloppy work. But let senior people take the heat on correcting others' sloppy work, at least until you learn what the attitudes about it are like.
Similarly, don't go having opinions about customer value or business strategy until you have a relationship with the product manager and an understanding of the context, intentions, and roadmap. When you do, they should be weakly held and gently expressed. Software engineering is your domain; there will be times when you know something that others don't and you have a duty to be firm about it. This will never be the case for business.
Real jobs are just college group projects that never end.
You’ll know it when you see it because you will literally get uncomfortable when thinking about completing it.
High output involves completely finishing things. It will be impossible at first, but as you get more experience, in both total and your current company you will be better at it.
For a decent company, the differences are:
* The skill set of group members probably suits the tasks (e.g. some good at leading, some good at coordinating, some good at coding)
* The reward is real and can be life-changing. (e.g. becoming millionaires)
* The punishment is real (e.g. being fired)
Becoming millionaire as a salaried employee is a pipe dream. Company owner will become millionaire, salaried employee will get yearly 10% bonus. In decent company maybe 20%.
I agree on skill set, but I saw many different things like electrical engineers writing C# code because manager wanted this.
In a typical FAANG company, you can simply stick to a job for like 4 years to earn a million USD (before tax). If you do well on top of that + stock growth, your compensation will sky-rocket.
There are 10 of thousands of employees reaches $1m in earning. Maybe it probably takes 4-5 years to save $1m. But it's not hard.
Anecdote: Back when I was first starting, we were experimenting with different agile styles, and were pulling cases off a backlog whenever we needed something new to do. It wasn't strictly ordered, so you could pull off the top several if there was something you wanted to do more.
The top two items were getting skipped for a long time, so I took one and stumbled around trying to figure it out. Ended up asking a few newbie questions (non-technical, about how the feature was intended to work) that our manager had no answer for, resulting in the case getting officially bumped way down. Then tried the second, and the same thing happened.
Even though I technically didn't get anything done (which did feel kinda bad at the time), I learned a decent amount about how those systems functioned, got rid of some eyesores, and brought it to everyone's attention that the cases hadn't been sufficiently fleshed out. Net positive, I think.
As a person currently struggling with always-say-yes related burnout symptoms I cannot stress enough how important it is to manage your workload to keep yourself sane. Balance is key
Maybe, but not if you already know what is being asked of you is boring because you have tried it before and it did not work. Also, don't be afraid of sharing experiences that you may have had - if a particular library/algorithm is sub-optimal and you know it, speak out.
Use percentages, such as saving 10% for long term wealth, and 5% for a fun account so you don't sabotage your financial plan.
Learn enough of the tax code in the country you live in so that when you make financial (and employment/business) decisions you are doing so while obtaining the best treatment in taxes, one of our biggest expenses.
Once this is all rote, you can focus on doing what you want, following dreams, exploring new realms, acquiring new valuable skills, etc. knowing that you have your financial base set up to grow solidly.
Regarding CS as a career: take classes in the humanities: art, history, political science, psychology, philosophy, etc. You’ll find you are better able to understand why you are doing what you are doing if your mindset for approaching problem solving is rooted in both technology and humanity.
It's very easy to end up with one or two pillars in your life that define it entirely, and that can make things harder when your life has ups and downs. And your life will have ups and downs. If the only thing in your life is your job, and you lose your job -- or are worried about losing your job -- it can really wreck your whole world.
Having a lot of things that are important to you gives you more resiliency. You may still care deeply about each individual part, but when one is going poorly you can at least take solace in and enjoy the parts that are going well.
I was told multiple times over the years that I was hired because of my attitude and work ethic, not my skills, which were comparable to every other candidate. Something to keep in mind.
Politics dictate promotions over merit, so don't burn yourself out trying to get promoted. They'll just expect the extra work as normal. They might not even have a place in the hierarchy to promote anybody. If you want a higher position, they are out there, but you'll have to interview for them. As geeks we don't want to deal with the business side of the equation, but that's what career advancement is.
For tech advice, always study the fundamentals. It will be your job to know and be proficient with the latest JS frameworks and backend stacks, but don't forget the core fundamentals like algorithms and data structures. You should know what a trie structure is. You should know the advantages of merge sort. You should know what Big O is. If you only stick with the js frameworks and such, you can end up as a programmer with 20 years experience and not really know anything. You have 20 years of 1 year experience, each in a different, now obsolete tech stack.
For life advice, your daily routine is everything. Your sleep schedule, diet, commute time, study time, entertainment, etc is key to advancing your life progress. Highly successful people have routines behind them where large swathes of events are managed in a clockwork fashion.
Edit to add: even if for some unaccountable reason you choose not to use Anki or one of its siblings, you must read and comprehend https://www.supermemo.com/en/archives1990-2015/articles/20ru... .
- Don't bother memorizing trivia. At least for work. Save room for the pleasurable trivia from your private life. Convince your team to set up a knowledge base and use it.
- Learn how to bookmark and reference stuff that is important.
- Almost nothing said in a meeting matters unless it is written down and most of the stuff that happens in meetings immediately evaporates into thin air.
- The palest ink is more reliable than the most powerful memory.
For discrete math currently, I solve problems, and either I come across 1 complex problem for each topic which I might have struggled with, or a problem which has concepts of multiple topics interleaved. I add that to my deck and I solve them regularly.
I would strongly recommend not having entire problems as a single card; it's absolutely crucial that answering any particular card is a single mental motion. (You can get by with a very small workload if your cards are more complex than that, but it doesn't scale even in the medium term.) I wouldn't go any more complex than "what is 75 * 43".
As an example, the definition of a red-black tree for me is six cards:
* What, imprecisely, are the colouring rules on a red-black tree? ["global; local; base-case"]
* What are the leaves of a red-black tree? ["null"]
* What is the base-case colouring rule of a red-black tree? ["leaves are black"]
* What is the local colouring rule of a red-black tree? ["red node => black children"]
* What is the global colouring rule of a red-black tree? ["black depth is well defined"]
* What is the black depth of a node in a red-black tree? ["the number of black nodes encountered on a path from that node down to a leaf"]
One might naively have created a single card that is "what is a red-black tree?", but in my experience such a card is too big. The difficulty of learning a card grows at least quadratically with the number of mental motions it takes to answer that card, and small/simple/easily-learned cards are incredibly cheap in that Anki very quickly learns not to show them to you if they're genuinely easy.
Maths-wise, my cards usually look like:
* "Does path-connectedness imply connectedness?" [yes]
* "Does connectedness imply path-connectedness?" [no]
* "Counterexample to connectedness-implies-path-connectedness" [topologist's sine curve]
* "Definition of the topologist's sine curve" [union of the y-axis and a squashed sine]
* "Definition of the squashing of the sine component of the topologist's sine curve" [whatever]
* "Main idea of the proof that path-connectedness implies connectedness" [use "all locally constant functions into [0, 1] are constant"]
Your job will most likely have nothing to do with what you were taught in school. It might have some superficial resemblance because you might use the same tools or in rare cases even apply something you learned but the the day to day work, the skills you need succeed and what you need to do to do something well are simply stuff you are never taught in school.
Higher education is used almost exclusively as a signal in hiring. Higher education teaches you how to be an academic (and if that's you career choice than forget what I said) it isn't a vocational school and neither the people who ran the institutions nor the people who will hire you expect Academia to actually teach you how to do the job.
This is true for almost all degrees to some extend, not just CS, but it is very evident in CS and many fresh graduates who land their first CS job have a hard time to adjust to the change in expectations.
For CS the shock usually revolves around understanding that most of what you are going to do is combining and interfacing with other people's code (whether colleagues, open source libraries or 3rd party services) and rarely if ever do algorithmic or data structure work.
Every job I've ever gotten was through friends. Including my first job.
I got my first job because one of my college friends got a job and recommended me. I got my second job because one of my college friends recommended me for it, after we worked together at the first job, which I helped him get. I got my fourth job because one of my friends from my second job worked there and vouched for me. (My third job was with a startup where I just approached the founders and told them I want to work there, and they said not right now, but we became friends and eventually they hired me when they had money).
Now most importantly, all of these college friends were made while working in technology positions in college.
My point is, it's never too early to start building your network. Make friends with people in the same career track now, show them how good you are at your job, return the favor when you're in a position to help them, and then reap the benefits throughout your life (not to mention the bonus of lifelong friendships).
When I first tried networking, I thought that I was supposed to help other people, and then ask those people for favors. To me, that felt really unnatural. It felt like we were just using each other.
Now I see that my friends are the people who help me the most. They're people who I care about, and who care about me. So when people tell you to "network", I would just translate what they're saying as "go make friends".
You're 19 and in your second semster, concerned about a post-uni job. It's great that you've started thinking about what the future could look like but also pretty pointless. There are too many factors out of your control when you'll be a new grad is 3+ years. Focus on the now. Explore classes that you really enjoy, take your breadth courses outside of CS or what you think employers will want. Do some dumb, fun things with other people, both technical and non-technical. Consider an internship or student position that lasts more than a summer - a 12 or 16 month work term delays graduation a year but look FANTASTIC on your resume when you go for that first post-grad job interview. Develop some interesting personal aspects beyond your technical skills. I love to hear about someone's exchange in Japan, or the non-profit they've worked with out of love vs. resume padding (it's obvious), or a deep passion for vintange computers or Russian lit or anything genuine and unique.
After you graduate you'll probably have 2 or 3 careers and countless jobs. This is amazing! Live in the now of each job, not always looking for your next move. The progression and change will come naturally or suddenly. Mapping out a decades-long career may still happen, but I've rarely seen it outside of a few industries/companies/fields.
You're going to make mistakes, the goal is not to be error-free. Don't make the same mistakes repeatedly and try not to make any fatal mistakes. Younger people are generally pretty good at try & failing and not destroying everything with their screw ups, but it's the good ones who avoid repeating them. New hires don't know much but this also means the good ones are willing to try anything and jump in to new areas. Be Courageous, not Fearless.
There are lots of other tidbits but I'm saving them for my opportunity to deliver a commencement address some day. If I only had one thing to say it would be that there is a lot more uncertainty about the future of a recent comp sci grad these days vs. the past ~25 years or so, when it was unambiguously really good or really bad. Prepare for this by cultivating flexibility and adaptability now.
2.be willing to change jobs if you don't have a clear chance of promotion inside.
3.be a likable person. Have a coffee with your colleagues, make small chat with your boss, ask about their lives, remember their families' names... In office politics it doesn't matter how good you are as much as how much people like you.
4.be your own advertiser. Probably no other person will be. Make sure that when you have a success everybody knows it was yours and what you did.
5.be willing to do more than your job's description, but don't be a pushover. Ask for compensation or recognition every time you do something beyond your duties.
Yes! This! This does not mean false promotion. It means being able to express succintly and understandably that what you are good at. The world is drowning in noise. You do a disservice to everyone, including yourself, if you don't create a "personal brand".
It does not mean being obnoxious or pushing yourself. It just means you can explain clearly - when the need is - what you are good at in as few words that are as effective as possible.
In the corporate world that one skill is what separates the adults from the children in the room.
Work hard. When you are young, this is the best time to go deep, and get good at something, since you are free from other responsibilities. Later, you will have many things you care as much or more about than work, and so the time in your life will have passed to be as deeply engaged with your work. A lot of the work you do will ultimately be lost, be failures, or end up in the trash bin for other reasons -- take comfort knowing that the work was done to mold you into the person you will become, not for the sake of the project itself.
Read Hamming's "The Art of Doing Science and Engineering." Have a plan, even though it will change with time, to move your career towards working on things you think are important. Even if you don't know what those are, make a point to "check in" with yourself every year or so to ask the question: "Am I working on the most important problems in my field? If not, why?" This doesn't mean you will always be working on these problems, and it doesn't mean that it's wrong to not be, it just means that you should always have a plan, a path, and a strategy towards getting there, and catching yourself if you are falling off-track.
Understand regret minimization as a framework for making good decisions.
Most of all, avoid listening too closely to advice :) Realize there are many paths through life, and yours is your own to write. Luck favors the prepared mind: prepare yourself, through work, and through reflection, to be able to recognize the doors that will appear that are uniquely suited for you to walk through. And, when they do, don't hesitate to go through them: the world, your peers, and 'common sense', will often try to pull you away from them.
Good luck!
McIntyre's Law: Anything I tell you could be wrong under the right circumstances.
Advice is more often than not, colored by the personal experiences of the person giving it.
I got no advice, I just tried to find something interesting (that I was not really competent enough to do). But it turned out well.
In the large scale life is ruled by statistics. In the small, personal scale by serendipity and chance. You live on the personal scale.
"And whats your best tip for life in general?"
Try to find a domain in which to work which is intrinsically interesting for you. You. Not the general public. Not interested in <hot topic X> that seems to be trendy? That's totally fine.
Try to be strategic with your career. Try to think time to time where you want to be in five years. You need a plan with alternative scenarios. They all probably go wrong - and that's fine. They are just a framework for your own reflection. But you need them.
Read biographies of people who've worked in your or similar domain.
Find out what the other guy is thinking. Not interested in management? Read a few books on management anyway. And don't use your knowledge in discussions. Because it will sound (no matter how you put it) like you read a few books on topic X and now think you are an expert.
There is a good book on every subject.
The most critical decision for your happiness will be who you will marry.
As for life in general: learn about personal finance. Once you’ve got a decent salary, you’ll need to know how to invest for retirement, save up for a house, pay down debt, etc.
I've never contributed to an open source project and my career has evolved just fine, though.
I think this audience over stresses the need of open source contributions. It's fine if you don't want to work in the open and don't want to share your code.
Natural curiosity of open codebases is a good thing to have, though :)
I've known several excellent 9-17 coders who work, and then go home to do other things.
1)
Depending on where you live, there will be hundreds/thousands of new CS graduates every year, but a smaller number of available jobs for juniors.
So, you need to differentiate yourself from the rest.
Starting from there, there are two paths you can follow to increase your chances of finding a good job (not mutually exclusive):
- Do what everyone does, but better.
- Do different things then everyone
2)
First principles thinking.
It has been an invaluable thinking method for me to improve myself, in all areas of life.
Some random links:
https://jamesclear.com/first-principles
https://www.theengineeringmanager.com/growth/first-principle...
Some examples on how you can apply it to software development:
- You will be using various languages/frameworks/libraries when creating software, with various level of abstractions. At the beginning, you won't have the necessary experience to understand how everything works underneath. Whenever you find time, try to dig through the abstractions to discover why they were built the way they built, how they work together. This understanding will make you a better engineer.
- When working with non-technical clients/project shareholders, what they say they want and what they really want will usually be different. Often, you will have to dig through their requests to find out how you should continue.
I always tell people two things when they start:
1) Impress everybody you meet. First impressions are very sticky. Impress people first, they will hold you to a higher standard, and then you aim to continue to impress. I’ve seen very few cases that people have shed their initial impressions.
2) Over-communicate. Make sure you ask questions, write thorough emails that explain rationale. It’s really important that you aggressively set and meet expectations. A major problem people have is expectation mismatch. Make sure both you and others are in sync and this usually happens via over-communication.
Eh, this is not great advice for new hires. Let's not encourage them to spam their managers for every decision. Ha.
Take a few advanced, specialized CS classes by your 3rd year. These often have large end-of-semester projects that can be fairly open ended.
These final projects are a great way differentiate yourself from the thousands of other CS grads looking for jobs.
Sure, you could get an 'A' in class by doing the bare minimum for a project. Alternatively, you could go beyond course requirements and have something to show off for potential employers, even if just another resume item to use as a conversation-starter. If you're doing the project anyway, going an extra 10% over the top is relatively easy, especially compared to trying to land a meaningful contribution to an open-source project or building a separate portfolio project from scratch.
The bigger firms recruit for raw numbers and then reassign roles. So this might not mean the difference between being hired and not in some of the bigger companies, but on what you're actually pushed towards at the end of the placement cycle.
The technical talent of a new grad is rarely used to explore the deep end of a complicated problem, but instead is full of work that takes time rather than thought. So the last year or so of your course is the last chance for the next 3+ years to work on a complex problem which you are obviously not qualified to work on.
The bare point is that nobody hires you to run a hilly marathon, but will give you tasks that are mile-times instead & expect you to sprint through them. And these are expected even with the best managers, who expect you to grow out of that phase at some point (as frustrating as it is going to be for you).
So the project is going to be the most useful thing for someone to pick you over someone else when dealing with a problem somewhere in the same region of CS.
The thing I did to "get hired" was learn J2EE, but what actually guided the next problem someone threw at me was because I did a bunch of compiler/byte-code junk as an undergrad which ended up being career defining for the next six years.
If I was in a class in today's world, I might do the same with a neural network or some computational genetics.
Not because it is directly tied to getting hired, but very relevant on whether a manager/tech-lead throws a similar problem at you soon. And possibly you'll get to work with the best people who do that for a living.
I recently met someone who started out as a dev in a bank, then took interest in the numbers part, and now he's a director in a mega-big bank in Internal Audit. Cool person.
In similar paths, I too studied CS, hated programming, started as help-desk, then moved to sys-admin, then to IT Audit and then IT Sec, GRC and now I am mixing and matching the above (Sec-Audit-GRC). I enjoy what I do and I never imagined that I would move from IT Ops if one would have asked me 20 years ago.
Ask people what parts of their career they enjoyed and why.. again this is about their life, but you can understand the CRITERIA more than the actual subject. Listen to their WHY and it may help you construct the rule-set that may lead you to your why/what/where/when.
1. I was learning much quicker and way more valuable content than my peers during university. I think it was mainly because I was getting curated content/tips from my mentor which saved me from learning things that I will probably never gonna need. 2. I got job offers even while not looking for jobs. Interesting enough, my mentor casually mentioned me within his network and those people ended up contacting me.
The best part of it is that you can get it 100% for free if you search carefully. The tech field is full of good people that are willing to give their time(usually very expensive) away to help newcomers. Specially those like me that got help from the start, paying it forward feels like a obligation.
But you might ask: “how can I connect with those experienced people?”. There are many ways to do it, but some very effective are:
- go to meetups and talk to people. Don't just sit there and watch the talks. Be part of it.
- use Twitter. You will be impressed by the amount ok knowledge that is being shared there.
- reach out To your local companies. Send them emails, knock at their doors. There is nothing cooler than seeing folks interested on your product/company.
And I think the first step for me would be getting to know people in the institute district we have here next to the university. But meetups are definitely something I want to go to in the future. But Twitter was something I always failed on. Any tips for Twitter?
Those are the kind of people who become indispensable for a company and it'll help you when you become an entrepreneur.
Silly example I agree (they won't ask you to clean the bathrooms... probably), but demonstrating a strong work ethic will get you noticed and earn you a good reputation that will pay back many times in the future.
I've had interns who get surly and moany when they don't get asked to work on machine learning to cure cancer and turn lead into gold, but got asked to fix some unit tests or something else unglamorous. They become a real pain to work with because you know they'll complain about whatever you give them so you end up just giving them scraps or at worst basically giving them nothong and letting them spend their time on tiktok or whatever because it's less hassle than trying to satisfy their ego. Don't be that person who makes a fuss for being asked to do real-world work and you'll go a long way.
Good luck
> demonstrating a strong work ethic will get you noticed and earn you a good reputation that will pay back many times in the future.
No, this is an exception rather than the rule. Depending on your employer/manager, a strong work ethic may or may not be noticed. If it's noticed, it might even impact you negatively since you'll be the guy who can be abused and overworked in the future especially if you can't speak up for yourself. The other options are that nothing changes with your work ethic or that you're rewarded in some way. In the cases that you are rewarded, it's more likely that your employer is giving you meaningless tokens, praise and/or more responsibility rather than actual perks or increased compensation.
Unfortunately, this can easily backfire. Make sure it is clean, sure, but at some point you are going to take time cleaning and it won't be appreciated at best. At worse, you are going to be told it took you to long to do the work. This is coming from someone who, at a foodservice job, had someone teach me how to mop. Their standards - for mopping anyway - were quite a bit lower than the standards I grew up with at home. It hasn't just been that establishment, either: Everywhere has some of this.
I'd much rather see someone be told, "Do well, but there is no need to be perfect. Be efficient where you can". This goes so much further and besides, most folks expect the new person to do a few things that are a bit off.
Not being fussy about the work you do, though: Solid advice. I've generally tried to do something other people dislike, if possible.
But you should have a workplace you like, because that is key, from my point of view.
I would say, rather, there are no stupid questions.
After awhile it will become increasingly clear who fields questions well, and who doesn’t.
Cultivate the former, avoid the latter.
After that period the ability to make other people re-think things significantly is made harder by their preconceptions about you, from their shared experiences.
BTW I've been telling new hires this for years, decades even. Not the 'after that they'll think you're an idiot' bit.
Also: The amount of effort needed for a task does not always correlate with the importance of the outcome. Sometimes big wins come easy and sometimes small wins are expensive.
In practice: being research assistant is a good start. Do it as long as you can afford - I mean no family, no obligations whatsoever. (3-8 years)
Find a small company - this will teach you applying theory in practice. (3-8 years)
After that you will have the potential to start up your business. (3-8 years)
If you really enjoy, continue what you are doing. If not -but only if you have tried all above-, look for employment in a big company. No matter if it is tech, automotive, beverages or anything else. It will provide stable living for the remaining time.
If you've done everything fine up to this point you can't be sorry missing anything in your profession.
During the whole time listen to the sounds! :) Contemplate, analyze what fits you most? Which topics you are interested most? What you enjoy most? What are you the best in?
Share your thoughts with the younger.
I'll be blunt: this sounds like work that pays poorly (it's academia), is likely to be quite demanding (it's academia), doesn't give great industry experience (it's academia), and doesn't get you a PhD (at the end of it you still aren't an academic). What's the upside?
The reason here is that all this low level stuff is the literal foundation of whatever abstraction (python, JVM, C#) your company uses. And while it is not directly applicable it will help you a great deal when things do not work. Be not the guy that says "I did everything like it is written in the manual and it it does not work". Be the guy that says, "looks like libfoo.so on my system here is ABI incompatible to the libbbar.so I downloaded. I think we need to recompile libbar.so to make it work, where is the source?"
On the other hand if the work is done on Windows it's much better to learn that platform than pining for something else.
Go with whatever is platform specific, and available out of the box. Avoid complex configuration packages just to get the specific interface flavour to the computational substrate you would prefer to use privately.
The reason is, if there is specific computational platform that the employer is using, you are much more helpfull to all around you if you operate with the vanilla settings rather than try to find something more special.
Privately try to find the best methods that work for you, in public, collaborating, try to find the most simple and straighforward method of contributing. Simple in this case does not mean a kludge, but it may mean a few extra lines of code or configuration here and there.
When you get the answers make sure you learn from them.
Other than that - enjoy it! I much prefer my working life to my college life.
If you're more risk-prone, find a problem and start a company. Too many good developers are wasted at FANG companies instead of solving the world's biggest problems. When you graduate, you'll likely be around 22-23, if you spend 4 years working hard on something you truly care about you'll only be in your mid-twenties and haven't really lost all that much time.
Obviously, handle any financial obligations (Student Loans mainly) before jumping into the startup deep-end.
1) Properly understanding what motivates yourself. What were the key parts of past jobs and activities that made you forget the time of day, do it for free, enjoyable.
2) Seek jobs with lots of the parts identified in 1) that you are confident you can be _bloody_ good at and people will pay you enough for.
3) When you apply for those jobs; apply for the job - tell the recruiter that you have read their advert, what it is that motivates you and that you are worth them spending time on.
For life in general; keep learning.
You'll be fine, but good luck anyway
Also, no matter how hard things get, keep a positive attitude, or at least don’t become negative. People wanna work with people they’d like to spend time around.
http://www.paulgraham.com/boss.html
do what you can to not work for anyone but yourself. even if it means reducing the scope of what you can work on and earning less.
and the hardest thing of all: find people you like, respect and trust - and stick with them. loyalty and fidelity above all else.
yes this sounds weird, but to me sleepwalking through life, being constantly distracted and dealing with office politics is by far more weird. to each his own i guess.
remember: don't ever rely on intelligence alone when making critical life decisions, it will only serve to dissuade you. after all, it's not the reasonable men who change the world.
* Read the documentation. I can't stress enough on that.
* Don't over-engineer stuff. Keep it plain and simple. Remember - most of your co-workers will have a lot of experience and you won't be able to impress them with something revolutionary. Chances are, they've seen it and had it for breakfast a million times.
* Don't be afraid to ask, even if it seems like a stupid question. Especially if you get wrapped up in a big and complex project. Most people are aware that during the first 5-6 months, new developers are often a net loss to the company, regardless of their skills and knowledge - there is always and adaptation period. Use that to your advantage.
* Be __brutally__ strict about the working processes and don't try to re-invent the wheel. Application structure, naming conventions, pull requests, code review - stick to it no matter what(unless there is a very specific situation and you are instructed to do otherwise). I.e. if everyone on the team makes short commit messages, that explain the change and link it to the relevant jira, github, gitlab(or whatever tracking system they use) ticket, do the same. No need to write a 50 line commit message describing the change in all files. And vice-versa - if they do write 50 line commit messages, explaining every line of code they've changed, do the same.
* Pay close attention to the most experienced people and try to understand their thought process and mentally train yourself to be able to think like them. Their thought process might not be the most efficient in general and it might be something completely different in your next job some day, but if it's proven to work for that team/company, stick to it.
* When you are given a task, check or ask if something similar exists. If it does, go over it, see if there is something you can re-use or at least understand it's mechanics and keep it close to that.
* You won't be in a position to say no, but everyone is in a position to require further details if needed. Which is not to say you should freely jump over to a senior developer every 3 minutes. Rather spend several hours trying to clearly understand what needs to be achieved, organize your questions in relevant clusters. That may help you answer many of them yourself. Whatever is remaining, ask someone if they have 10 minutes, go have a coffee with them if needed. If your questions/concerns are valid and relevant and what you are expected to do makes no sense, they can step up for you or tell you who you should talk to.
Good luck!
There are lot's of production codebases with very little or no documentation, though.
"Don't over-engineer stuff. Keep it plain and simple."
This in an excellent advice.
"Pay close attention to the most experienced people and try to understand their thought process and mentally train yourself to be able to think like them"
Yes, this is similar apprenticeship. Just being able to work with talented people is an outstanding thing to have. On the other hand, if you are a junior contributor, but can't find the obvious master programmer around, that is a huge red flag that the organization is filled with mediocrity through and through and it probably would be best to work somewhere else.
If you actually feel you are the most talented programmer, and are confident of your skills, that is an important datapoint. If your organization does not value your skills in couple of years you should definetly move on.
Indeed. But the advise is equally as valid for libraries or frameworks used in a project, which as a junior developer, chances are you have very little experience with. Read those :)
> On the other hand, if you are a junior contributor, but can't find the obvious master programmer around, that is a huge red flag that the organization is filled with mediocrity through and through and it probably would be best to work somewhere else.
Also correct. That said, you can go through the history of the project you are working on and see who's done the heavy lifting, granted they are still around.
> * Don't overdevelop things. Keep it simple. Remember - most of your employees will have a lot of experience and you won't be able to impress them with anything revolutionary. Chances are that they saw it and ate it millions of times for breakfast. But also important to not use a package for every little thing. I personally experienced many that e.g. in the NodeJS ecosystem, use huge packages to use a minimal set of functions or someone can easily copy from Stackoverflow which just makes the project more overcomplicated. Just a single package not updating can fck everything up.
> * Don't be afraid to ask, even if it seems like a silly question. Especially if you are involved in a large and complex project. Most people are aware that new developers are often a net loss for the company in the first 5 to 6 months regardless of their skills and knowledge - there is always an adjustment phase. Use that to your advantage. Above all is asking questions in the first weeks starting a new job. Else it is just stumbling around through the project.
> * Be __brutally__ strict about work processes and don't try to reinvent the wheel. Application structure, naming conventions, pull requirements, code review - stick with it unless (there is a specific situation and you are instructed to do something else). That is, if everyone on the team creates short commit messages that explain the change and link it to the appropriate Jira, Github, Gitlab ticket (or the tracking system they use), they do the same. There is no need to write a 50-line commit message that describes the change in all files. And vice versa: if you write 50 line commit messages and explain each line of code you changed, do the same. It is important to expect at least some knwoledge from the developers not to explain everything, because good naming already makes the code so easy to read, like a book. But, Magic lines need to be explained often with more than one line.
> * Pay close attention to the most experienced people and try to understand their thinking process and train yourself mentally to be able to think like this. Your thought process may not be the most efficient in general, and it could be something completely different for your next job someday, but if it turns out to work for this team / company, stick with it. Tips on not be annoying but still have a good amount of messages and discussion with them?
> * When you receive a task, check or ask if there is anything similar. If it does, go through it, check for anything you can reuse, or at least understand the mechanics, and keep it close. And always automate if something takes longer or is a recurring thing. Whats your opinions on prototypes? In terms of how functional they should be. Personally I build prototypes just to work and show the general concept, but could not be used by clients for "production".
> * You won't be able to say no, but everyone will be able to ask for more details if needed. That doesn't mean you should switch to an experienced developer every 3 minutes. Rather spend several hours understanding clearly what needs to be achieved and organize your questions in relevant clusters. This can help you answer many of them yourself. Whatever is left over, ask someone if they have 10 minutes and have a coffee with them if necessary. If your questions / concerns are valid and relevant and what is expected of you makes no sense, they can stand up for you or tell you who to talk to.
So better collect for a bulk of questions and try to solve them in the meantime.
This point refers to being observant. I.E. open up a ticket about a feature that's already been implemented, and go through the implementation, how did the developer go about implementing everything. Preferably a more recent one, as old ones might be something that was rushed through at an earlier stage of the development or simply legacy code.
> Whats your opinions on prototypes? In terms of how functional they should be. Personally I build prototypes just to work and show the general concept, but could not be used by clients for "production".
Double edged sword. Prototypes are a great thing when you are 100% sure you have plenty of time ahead of you. Otherwise they just become a "working" solution that sneaks into the codebase and goes to production with a "TODO: refactor" somewhere. Sooner, rather than later that bites back.
> So better collect for a bulk of questions and try to solve them in the meantime.
Bingo. And by grouping them together, some questions will answer some of the others. My advice - open up a text editor and write them down.
CS pros have to be intelligent to get in the game. Once they are in, the primary success factors are a. Do you participate effectively in a team and b. do you work hard and pull your weight. Most universities today have coursework that includes extended, team projects. Do well in those programs, encourage your teammates to be competitive and committed and actually make something you can show off when you start interviewing. Be ready to go into detail, not just on the technical, but the team dynamics: What role you played, and here's a nugget: What were the different strengths of the team members and how did you deliberately take advantage of those strengths. A new grad who displays that type of insight will set themselves apart.
Many jobs are landed through networking. Establish relationships with upperclassmen and keep in touch after they graduate. When you're ready to start looking, some of them may be working at companies you target. When you do your summer internships, connect with everybody you can. You can reach out to them, and in many cases, they will have moved and seeded other companies that you could interview with.
Finally, just some out of the box thoughts for getting that first job: Cast a wide net. Submit a lot of resumes. Take a lot of interviews. Before each, research the company. Not just their technical products, but again, what market do they serve and do you believe you'd be challenged by that industry for the long term. Be good about following up. Don't be a pest, but don't let more than a week go by without checking in with your contacts on how it's going. Many companies are really bad at keeping candidates apprised of their status in the hiring, or where they are in the process. You don't want to just be left hanging when they've made a decision weeks ago.
Good Luck!
2. Work like there is no tomorrow and save like you will live forever. Max the fudge out 401k.
3. Learn about office politics and stay the fudge out of it. Co-workers are human and they will make human mistakes and might hurt you intentionally or otherwise. Grow a thick skin don’t take everything others say or do so personally.
I think your internships and being a research assistant should be your biggest assets. Try to remember some of your accomplishments and how you handled tough situations. Managers/recruiters love to ask you about past experiences. Try to get letters of recommendation from your bosses and from a professor too.
I have a CS degree. While young and unattached you can spent time on learning a lot and becoming a better sw developer. Do this now before wifey (assuming male gender) and children will take a considerable amount of your time.
*(assuming male gender and heterosexual and wanting to have kids)
This probably applies to any profession.
Equally important are your soft skills. I would recommend reading The Hard Truth About Soft Skills: Workplace Lessons Smart People Wish They'd Learned Sooner by Peggy Klaus.
Senior engineers and managers usually have lives outside of work. Don’t bother them off hours if it’s not an emergency.
The late night hacker archetype is usually immature and not a team player.
Careless mistakes are worse than calculated mistakes.
By all means, focus on your early growth. But try not to be blinded by loyalty.
I'm talking about goals and it doesn't matter if that is being an entrepreneur or the best ballerina in the world.
When you know what you want, as early as possible, you can work on a path to that goal. And if you have a path, you know what to do and how to do it.
In my opinion this will increase your happiness in life tremendously as you don't walk through life "unconsciously".
This question "What do you want" isn't so straight forward and easy to answer. It requires a lot of thought, but is very rewarding.
Don't show off.
Yes, the system is a mess and everyone knows that.
But we can't fix it.
I simply call mine "life.md" .
This will be invaluable because you won't have to ask twice about a piece of information that you've learned because you'll already have it written down.
- work on projects you actually care about. I can’t stress this enough. If you take a project or a role for the money, make sure 1) you’re honest with yourself about your reasoning, don’t lie to yourself to sugarcoat it 2) you have a plan for leaving (e.g. taking a role with a high signing bonus so you can pay the down payment on a house or buy land, and leaving after the 12 month probation period so you don’t have to pay it back), 3) consistently checking in with yourself about how things are going. Which leads me to...
- go to therapy regularly, even if you don’t think you need to. and journal regularly. like...on paper, in the morning, with a cup of tea, about your feelings. don’t let things fester, don’t live with regrets or sacrifices.
- have creative hobbies. don’t let your guitar gather dust, don’t let your paint dry up
- enjoy having a lucrative job, but don’t let it turn you into a yuppie. I’m a terrible person to take financial advice from, but I could never do the “high paying job, save 95%” thing - it’s soulless and you want to have fun whilst you’re young or you’ll just be old, financially independent, and bitter about all the things you missed out on. Have fun, eat at fancy restaurants, travel as much as you can. But don’t waste your wealth on expensive yuppie materialist goods either - especially if you end up in London, NYC or SF it seems hard to not blow your money on all of the trendy expensive things that everyone else in tech buys. Spend money on experiences.
- live in community as much as you can. live with lots and lots of roommates because you’re excited about living a life together, and then invest your time in them. Cook with them, hang out with them, do wacky art projects with them, put on events, raise kids with them, build something greater than yourself. Isolation is a disease. The Bay Area has an excellent co-op community - imo no one in the Bay should be paying $3500 to live by themselves in a nice-but-boring studio apartment. It’s SO nice to come home to a house full of people who care about how your day was.
- party more - your 20s will go extremely quickly and I promise you won’t look back wishing you spent more time in an office. seriously. go to that party.
A motto I picked up from a dear coworker at the one Big Corporate Job I had: “tell good stories”. Live a life where you amass interesting anecdotes to tell at dinner parties, or to your grandkids, or to your roommates when you’re stuck in isolation because of a pandemic. “And then I spent 5 years in an office” isn’t an interesting story.
Tl;dr -
1. Don’t go straight to Stack Overflow
2. Learn the standard libraries
3. Put away your phone
4. Figure out how to unblock yourself
5. Figure out when to ask for help
6. Keep track of what’s going on in the industry
7. Stop being insecure