16 answers
16 answers
Updated
Stuart’s Answer
It's hard to answer how hard it will be for you. As with most things, something that is easy for one person may be hard for someone else. Some key parts to keep in mind when trying to figure out a career to pursue are:
. Are you really passionate about the field. If you are then you will be more likely to work at it and not mind the challenges
. Do you want to work alone or as part of a team?
. Are you a logical thinking that plans things or someone who just reacts in the moment to solve something? For a software engineer, there is definitely thought and logical thinking
. How quickly can you pick up things? To be a software engineer you will need to keep up with constantly changing technology (bare metal vs cloud, OS, programming languages, etc). This can be a little intimidating
. Do you deal well with pressure. Production problems and project deliverables often cause work on weekends and late nights and can be very stressful. This is one of the hard parts...
. Are you really passionate about the field. If you are then you will be more likely to work at it and not mind the challenges
. Do you want to work alone or as part of a team?
. Are you a logical thinking that plans things or someone who just reacts in the moment to solve something? For a software engineer, there is definitely thought and logical thinking
. How quickly can you pick up things? To be a software engineer you will need to keep up with constantly changing technology (bare metal vs cloud, OS, programming languages, etc). This can be a little intimidating
. Do you deal well with pressure. Production problems and project deliverables often cause work on weekends and late nights and can be very stressful. This is one of the hard parts...
Hits all the right notes! Hard vs easy is subjective and based entirely on the person.
Brian Weissman
Updated
David’s Answer
This is a big question with lots of potential answers. No matter what career field you get into, at some point you'll be responsible for doing something and being responsible for outcomes. At times you may have to work under the pressure of time, and your ability to communicate effectively with those you report to, and sometimes customers will be key to navigating difficulties.
Assuming you go to work for a company that has a healthy work/life balance policy, the stresses of work should never end up overwhelming you, and a great organization should afford you opportunities to learn and expand your knowledge.
That said, you've asked specifically about learning computer software and technologies. The best way to learn anything in these areas, for me, has been a "hands on" approach. Do the best you can to play around with technology, and software and try to solve some problems. I've found things like the "advent of code" can be fun to try to solve using different techniques and programming languages. From a technology point of view, you may find that there's interesting projects in "makers" communities. (Groups of people who tinker with electronics, raspberry pi computers, arduinos etc).
There's a lot of ways to learn, and sometimes deciding which first steps to take is the most difficult part. It helps if you can define a focus for yourself. Start with asking yourself questions like "am I interested in how the Linux kernel works?". "What's this Plan 9 operating system all about?". or "Maybe I can come up with a neat way to water my plants using an arduino? I wonder what's involved with that, or if anyone has done such a thing before."
Find something that really sparks your interest and courageously dive into it!
Best wishes!
Assuming you go to work for a company that has a healthy work/life balance policy, the stresses of work should never end up overwhelming you, and a great organization should afford you opportunities to learn and expand your knowledge.
That said, you've asked specifically about learning computer software and technologies. The best way to learn anything in these areas, for me, has been a "hands on" approach. Do the best you can to play around with technology, and software and try to solve some problems. I've found things like the "advent of code" can be fun to try to solve using different techniques and programming languages. From a technology point of view, you may find that there's interesting projects in "makers" communities. (Groups of people who tinker with electronics, raspberry pi computers, arduinos etc).
There's a lot of ways to learn, and sometimes deciding which first steps to take is the most difficult part. It helps if you can define a focus for yourself. Start with asking yourself questions like "am I interested in how the Linux kernel works?". "What's this Plan 9 operating system all about?". or "Maybe I can come up with a neat way to water my plants using an arduino? I wonder what's involved with that, or if anyone has done such a thing before."
Find something that really sparks your interest and courageously dive into it!
Best wishes!
Updated
Walter’s Answer
I think the most hard and most important part is stay focus to how to make the most reasonable program and structure.
And beyond that the most hard part is how you put those program to the most useful place to help the world to be better place!
And beyond that the most hard part is how you put those program to the most useful place to help the world to be better place!
Updated
Mickael’s Answer
Hi Yahel,
It's hard to properly answer your question. There is no a single hardest part in any job. The hardest depends on you, people you are working with, time, project ...
For me, the hardest part may be context switching all the time from fixing a defect, to investigating a problem on a customer's configuration and then move back to develop, debug ... project specific. But it is not always that hard all the time.
Some other Software Engineers may tell you that learning and being proficient with multiple languages and/or technologies is the hardest part.
Some other will tell you debugging is hardest.
Some will tell you working with others and reading their code is the hardest
Really depends on too many factors to give you the right answer here.
Sorry
It's hard to properly answer your question. There is no a single hardest part in any job. The hardest depends on you, people you are working with, time, project ...
For me, the hardest part may be context switching all the time from fixing a defect, to investigating a problem on a customer's configuration and then move back to develop, debug ... project specific. But it is not always that hard all the time.
Some other Software Engineers may tell you that learning and being proficient with multiple languages and/or technologies is the hardest part.
Some other will tell you debugging is hardest.
Some will tell you working with others and reading their code is the hardest
Really depends on too many factors to give you the right answer here.
Sorry
Updated
Aron’s Answer
In my career the hardest part of any field is the initial fear that comes with anything that is new to someone. That fear and how you handle/manage it will determine how well you do at anything you encounter on your journey as a Software Engineer or any other field for that matter. Some of us worry about failure, before we even give ourselves the chance to experiment and try things out. Albert Einstein said a couple of famous quotes: "Failure is Success in progress" & "A person who never made a mistake, never tried anything new." Give yourself the chance and embrace the things that present a challenge. Take that first step.
Updated
Rama’s Answer
The software engineer is not a routine job. it throws challenges and new problems almost every day. You need to have passion for software engineering and must be a continuous learner to overcome the challenges and solve problems. The technologies are ever changing and you need to prepare to keep yourself updated. The changes and developments in software engineering were significant in the last 25 years and these changes and developments are going to be more significant in the next decade or so. The real question is are you up for these challenges? If the answer is yes, then go for it.
Updated
Ram’s Answer
That doesn’t have a simple and universal answer. It always depends on the project you work on.
Sometimes, it’s difficult to find an (efficient) algorithmic solution, because the problem is complex (but as soon as you figure the algorithm out, the implementation is easy). Other times, the solution is obvious in principle, but the implementation is hard and demanding. Sometimes, it’s tedious, sometimes you’ve got precious little time for it…
I’d say that, at least in my case, the most difficult and impeding problems I had to deal with actually didn’t have much to do with programming or computer science in general. Mostly, it was the meta-problems like that.
Sometimes, it’s difficult to find an (efficient) algorithmic solution, because the problem is complex (but as soon as you figure the algorithm out, the implementation is easy). Other times, the solution is obvious in principle, but the implementation is hard and demanding. Sometimes, it’s tedious, sometimes you’ve got precious little time for it…
I’d say that, at least in my case, the most difficult and impeding problems I had to deal with actually didn’t have much to do with programming or computer science in general. Mostly, it was the meta-problems like that.
Updated
Raghavan’s Answer
As a software engineer, you can easily get engrossed in your problem-solving or programming work. Most of your work is in front of your computer - so, a majority of your day is spent just sitting (and a bit of standing). If work gets deeply interesting, you may tend to forget there is a world beyond your work. For those who manage to remain socially active, they have to make sure they have healthy spending and eating habits too :). It's important to remember to take care of your mental and physical health right from early in your career. That's the hard part - youngsters in 20s may think these are insignificant, but by the time they get into 30s irreparable damage may happen.
Updated
Emil’s Answer
I agree with Stuart -- this is a tough question. What is difficult in any job for one person may be easy for another. Some characteristics about software development / engineering that can be challenging are:
- figuring out how existing code works when there is no or little documentation
- having to understand complex data structures and algorithms
- adapting to a particular agile methodology and/or DevOps model
- being responsible for end-to-end delivery and on call for both system outages and security issues
- having to work with others and often as part of a distributed team
Like all jobs there will be people and process challenges -- process can include tools, methodologies, work hours, etc.
- figuring out how existing code works when there is no or little documentation
- having to understand complex data structures and algorithms
- adapting to a particular agile methodology and/or DevOps model
- being responsible for end-to-end delivery and on call for both system outages and security issues
- having to work with others and often as part of a distributed team
Like all jobs there will be people and process challenges -- process can include tools, methodologies, work hours, etc.
Updated
Sujith’s Answer
Every other branches of engineering has a fixed & standard way of doing things.
Example: For a bridge of so and so length, max-weight bearing etc, xyz are the required materials, 123 is the required height of pillars so and so; are all fixed and can be calculated with formulas.
Basically I'd say there is a standard for everything in Mechanical, Civil, Aviation, Navy, Industries or any other engineering branches.
And note that these standards have been tested against time for a while now. So pretty solid and evergreen, I would say.
However, computers or softwares are continuously evolving, and constantly changing. By the time a standard is defined, technology changes which requires a different standard.
This continuous change brings multiple different ways of doing the same thing. None of the ways are wrong, but one needs to know these options and choose the best suited way for the use case in hand.
Summary:
Keeping updated about faster change in technology could be considered as a challenging part as compared to other engineering branches.
Example: For a bridge of so and so length, max-weight bearing etc, xyz are the required materials, 123 is the required height of pillars so and so; are all fixed and can be calculated with formulas.
Basically I'd say there is a standard for everything in Mechanical, Civil, Aviation, Navy, Industries or any other engineering branches.
And note that these standards have been tested against time for a while now. So pretty solid and evergreen, I would say.
However, computers or softwares are continuously evolving, and constantly changing. By the time a standard is defined, technology changes which requires a different standard.
This continuous change brings multiple different ways of doing the same thing. None of the ways are wrong, but one needs to know these options and choose the best suited way for the use case in hand.
Summary:
Keeping updated about faster change in technology could be considered as a challenging part as compared to other engineering branches.
Updated
Nancy’s Answer
Transitioning from writing SW for your own amusement or as a college assignment to writing SW as an employee of a company is often a very difficult change to make. When you are working for a company, you need to produce SW at a pace set by the organization and with a rigor that you wouldn't have to have working solo. You also need to work collaboratively with others and your schedule could get impacted by the person ahead of you not meeting their schedule.
Developing robust code that integrates into a larger construct, is bug free, has lots of good error handling, easy to maintain by others, combine to make the job difficult.
Writing design specifications and test plans is also sometimes challenging for the newly minted SW engineer.
I agree with others who have noted that "keeping up" with the latest trends is also extremely challenging. Your job might not offer opportunities to learn new languages or coding practices. That will ultimately squeeze you out of the market (or limit your options) and you will need to pursue continuing education on your own.
Developing robust code that integrates into a larger construct, is bug free, has lots of good error handling, easy to maintain by others, combine to make the job difficult.
Writing design specifications and test plans is also sometimes challenging for the newly minted SW engineer.
I agree with others who have noted that "keeping up" with the latest trends is also extremely challenging. Your job might not offer opportunities to learn new languages or coding practices. That will ultimately squeeze you out of the market (or limit your options) and you will need to pursue continuing education on your own.
Updated
Brian’s Answer
There are already some really good answers here, so I'm going to make a couple of assumptions to take my answer in a slightly different direction.
Assumption 1: You are interesting in computers and technology or you wouldn't be asking
Assumption 2: You enjoy it or are at least good at it or you wouldn't be considering it as a career
With that in mind, most of the fundamentals of the career shouldn't be hard for you to master. The hard parts will be in finding where you fit and in keeping yourself relevant and not getting stuck in a rut. Stuart covers a lot of that in his questions like the working alone or as part of a team. There are very few solo software engineers out there. It can be done, but in general, being able to connect and collaborate with others is going to be a key skill that many with a more logical mindset struggle with.
Software engineering is diverse and can include soft-skills like customer interaction and requirements gathering. So, if you have a hard time with people, that will be the toughest part. You are also called upon to deal with competing priorities and more work than time. If you are a people pleaser and don't like to say no, you will struggle with that aspect of the job. If you are bad at time management, you will struggle with that aspect. You see where I am going. Look inside yourself and find your personal weakness. That will be the hardest part of software engineering. ;) But take heart, because there are roles where you can avoid some of it. Or things you can do to mitigate a weakness. Bad at saying no, refer people who are trying to get you to change priorities to your manager. Tell them you'd love to help, but you aren't in charge of the priorities of the tasks. Bad at requirements? Team with someone who is good and work on learning.
The other thing I mentioned is being careful not to get in a rut or pigeon-holed. That is the other "hardest thing". You can become so good at a particular thing that nobody wants you to do anything else. That thing may be boring, easy, and second nature to you. You could do it in your sleep. You need a new challenge, but your employer likes you where you are because you are crazy productive at this one thing. Don't be afraid to ask for more. Managing your growth is as important as learning your skills.
Assumption 1: You are interesting in computers and technology or you wouldn't be asking
Assumption 2: You enjoy it or are at least good at it or you wouldn't be considering it as a career
With that in mind, most of the fundamentals of the career shouldn't be hard for you to master. The hard parts will be in finding where you fit and in keeping yourself relevant and not getting stuck in a rut. Stuart covers a lot of that in his questions like the working alone or as part of a team. There are very few solo software engineers out there. It can be done, but in general, being able to connect and collaborate with others is going to be a key skill that many with a more logical mindset struggle with.
Software engineering is diverse and can include soft-skills like customer interaction and requirements gathering. So, if you have a hard time with people, that will be the toughest part. You are also called upon to deal with competing priorities and more work than time. If you are a people pleaser and don't like to say no, you will struggle with that aspect of the job. If you are bad at time management, you will struggle with that aspect. You see where I am going. Look inside yourself and find your personal weakness. That will be the hardest part of software engineering. ;) But take heart, because there are roles where you can avoid some of it. Or things you can do to mitigate a weakness. Bad at saying no, refer people who are trying to get you to change priorities to your manager. Tell them you'd love to help, but you aren't in charge of the priorities of the tasks. Bad at requirements? Team with someone who is good and work on learning.
The other thing I mentioned is being careful not to get in a rut or pigeon-holed. That is the other "hardest thing". You can become so good at a particular thing that nobody wants you to do anything else. That thing may be boring, easy, and second nature to you. You could do it in your sleep. You need a new challenge, but your employer likes you where you are because you are crazy productive at this one thing. Don't be afraid to ask for more. Managing your growth is as important as learning your skills.
Updated
Ramakrishna’s Answer
Like any other engineering stream the computer science also teaches the fundamental concepts and its applications. The hard or easy depends on how good and efficient are you in learning fundamental computer science and programming concepts; and be very good at them. Though computer technology is a fast changing domain, but strong foundation knowledge in basics such as computer organization, programming languages - C,C++, Java, Python etc, Operating Systems, Databases, Computer Networks etc will enable to pick up any new technology and domain specific skills such as Cloud Computing, Edge Computing, Machine Learning, AI etc. as easy as possible.
What it requires is strong interest in computer systems, software, programming languages and problem solving approach or mindset. Be prepared to learn continuously and get updated on current technology. With systematic learning and strong fundamentals, learning computer science is not hard.
What it requires is strong interest in computer systems, software, programming languages and problem solving approach or mindset. Be prepared to learn continuously and get updated on current technology. With systematic learning and strong fundamentals, learning computer science is not hard.
Updated
Sunderajan’s Answer
For me, the most difficult part of being a SW engineer is to be stuck with one domain or programming language for too long. It is all about being creative, learning something new everyday and moving on to newer things, newer technologies as they evolve. Technologies change, be disruptive and become obsolete in no time - so keeping your skills updated with current technologies is another real challenge.
Updated
Yee’s Answer
All the prior answers are valid. There is no "one shoe fits all" kind of answer for your question. Software engineering is such a diverse field and the companies which hire software engineers are all very different too. Some companies will demand a lot of your time. That may be the hardest thing for you if you want to commit more time for your family. In some companies, there can be a lot of pressure before a major release. If you can't handle stress well, then this may be the hardest thing for you. Some companies may place an emphasis on collaboration. If you are not good with people, then this may be what you find difficult. You may be more extroverted and find coding alone all day to be maddening. I can go on and on, but you get my point. So the technical aspects of being a software engineer is only a fraction of the equation.
It helps to be adaptable and you should be willing to learn new software engineering skills and gain knowledge in the field you are developing software for.
I hope this helps and good luck!
It helps to be adaptable and you should be willing to learn new software engineering skills and gain knowledge in the field you are developing software for.
I hope this helps and good luck!