What sort of Skills/Knowledge does a Software Engineer need? Watch

Svesh
Badges: 18
Rep:
?
#1
Report Thread starter 4 months ago
#1
Would just learning multiple programming languages and doing some projects/internships be enough to get a job?
Or what else will you need to learn?
0
reply
winterscoming
Badges: 19
Rep:
?
#2
Report 4 months ago
#2
Learning multiple programming languages shouldn't be your highest priority because there's much better ways you can make use of your time as a novice -- for at least the first 6 months anyway I would strongly recommend sticking just to one modern, popular, general-purpose programming language. Python, Java or C# are all excellent choices, both in terms of learning to program as well as having plenty of job opportunities in those specific languages.

Learning multiple languages starts to become an interesting proposition once you're already feeling strong/confident in your "first" language and you're already happy that you have the depth of understanding of that, while also having strong computational-thinking and problem solving skills.

Whatever you do - keep on practicing. You can always find loads of sites like Leetcode, Project Euler, Hackerrank and others to challenge yourself and become a better thinker, a better problem solver, and use that to hone your programming skills. Personal projects are an excellent idea. I would suggest trying to build at least one large non-trivial project (something equivalent to a graduate's final-year software engineering project) which you can use as a way to practice, learn, get experience working with complex code and complex requirements, and also something to be proud of when you're trying to prove your skills in an interview.

There are a few core skills which you should also focus on as early as possible:
- Learn how to use your integrated development environment (IDE) - especially the debugger. A debugger takes about 15-20 minutes to learn and will save years of your life lost in frustration in trying to find errors/bugs, triage broken code, understand how/why code works in a particular way, etc.
- Get a "GitHub" account and get yourself into the habit of committing code to a git repository - use that for your projects. Git is a core skill in a lot of technical IT jobs, and isn't a huge topic to learn, although there is definitely a learning curve. Lots of tutorials and videos online explaining the basics.
- Avoid bad habits. Always write good, readable code even if it seems pointless. Get good at naming stuff, indentation/formatting (consistency is important!). get into the habit of breaking code down into small functions and avoid "monolithic" heavily-nested super-complex code. Clarity and simplicity are so much better than obscurity and complexity.


- Learn the various different "paradigms" and advanced features of the language. Object-Oriented programming and Functional Programming concepts are important. Different languages have quitea few different paradigms, for example, C# also has "Generic" programming, Event-Driven programming, Asynchronous Programming.

Make sure you're also confident with using your chosen programming languages to do some of the following:
- String manipulation (Maybe including some basic RegEx, but don't blow your brains out over that - RegEx is nice to know yet also really ugly/nasty)
- Data serialisation (e.g. data into XML or JSON format -- JSON is very useful, especially for web technologies)
- File I/O
- Exception handling and how to structure your code to handle errors gracefully.
- Multi-Threading, Concurrency, Parallelism and Asynchrony (all closely-related terms which are often inter-connected with each other)
- Basic Network programming. Also, working with HTTP is extremely useful - maybe try the Twitter API or something similar.

After that, look into Object-Oriented Design and Software Design Principles - i.e. the kinds of considerations which help you build large scale apps with thousands of lines of code without those apps turning into an unmanagable, tangled, web of spaghetti, or feeling like a wonky game of Jenga, or a "big ball of mud". You'd usually find interviewers are interested in seeing if you can cope with large projects because chances are an employer hiring you as a junior engineer would be throwing you into a lot of big, complicated projects -- Things like SOLID and GRASP principles are important to understand and be aware of, also common "OO Design Patterns" which you will find in a lot of commercial software projects like Repository Pattern and Model-View-Controller(MVC) pattern.

Leading on from software design principles, another absolutely essential skill is being able to write Automated tests for your code. Employers love to find programmers who understand automated tests and who appreciate the value in having the automated tests. Doing automated testing 'well' is actually not as easy as it sounds, and writing your code in a way which is easy-to-test can be challenging at first, so there's a whole sub-discipline of software engineering all about Unit Testing and Test-Driven Development

Once you're at an intermediate/comfortable stage of writing code, also I'd strongly recommend some of the really good sage wisdom in this book
https://www.amazon.co.uk/Code-Comple.../dp/0735619670
Don't be put off by the publication date, it's a book which stands the test of time -- the kind of "every programmer should know.." type wisdom which comes from years of experience writing code and doesn't really go out-of-date.

Databases are pretty much mandatory in the modern world. Data Modelling, Relational Database design, Database Normalisation and knowing SQL is going to help you a lot. Something that you would probably pick up as a by-product of learning web development too.

Some web development is also a great idea - that would usually mean focusing on a web framework for your chosen/preferred programming language. For example, C# uses ASP.NET. Java uses Spring. Python uses either Django or Flask.

If you're doing web development, then HTML and JavaScript are also inescapable beasts - HTML is a no-brainer if you can cope with programming (and CSS isn't a big deal either, but you need the basics). JavaScript is a little bit of a "quirky" language, and realistically it makes a really good choice as a second language after C# or Java or Python because it is the "programming language of the web". -- Also, these days people write Desktop and Mobile GUI apps using web technologies too.
Related to web development - Bootstrap and JQuery are the "bread and butter" libaries for front-end web development.

If you really want to jump further into web apps, then consider looking much deeper into it and get into the advanced, sophisticated world of writing fully-blown client-side web applications in ReactJS or Angular7 or VueJS

Some general IT skills with your O/S are also pretty much essential (Maybe take the opportunity to learn Linux if you aren't already familiar with it?) -- chances are that you'll encounter things like user logins, security, permissions, etc. (it's easy to write an app which can run-as-administrator. Requires a bit more careful thought when writing one which runs as a plain user -- e.g. apps running with standard user permissions aren't allowed to just write to any part of the hard disk nor can they access the Windows Registry, etc..)

Not required but also useful - the world is moving to Cloud Technologies. Maybe open up a free Microsoft Azure account and get some experience tinkering with azure services like the databases, web hosts, lambdas, identity, messaging, and loads of other cloud-based tools. Those cloud platforms allow you to put your own web apps up there -- managing your web server on that platform instead of a physical server or virtual machine.


In terms of getting a job - it's all about being able to show employers that you are the person who is going to be able to just do the job and cope -- they don't mind hiring people who lack commercial experience, but they will always want to be absolutely confident that you're a strong problem solver, proactive in learning and trying to figure stuff out for yourself, not phased by the need to spend all day googling to try to understand how stuff works and get to the root of a problem. A strong understanding of underlying programming concepts, logic, computational thinking and general technology. You should expect to be be asked technical questions on phone interviews, given programming problems to solve, asked to do a walkthrough of a project, maybe a "whiteboard" problem-solving task too

Something else you could do if you're interested is get yourself involved in some open-source projects - https://www.firsttimersonly.com/
Open source projects are often run by experienced software engineers and even businesses with an "open" policy on people being able to grab the code, add new features, fix bugs, get involved in the community, etc.

Keep an eye out on developer meetups too - lots of the big cities have programming communities who will do events where developers may meet up every month or two for talks, hackathons, tech previews, etc. Great opportunities for learning more, doing some social networking, and being part of that city's "dev community". e.g. meetup.com has things like C# groups, Java groups
Last edited by winterscoming; 4 months ago
3
reply
Svesh
Badges: 18
Rep:
?
#3
Report Thread starter 4 months ago
#3
(Original post by winterscoming)
Learning multiple programming languages shouldn't be your highest priority because there's much better ways you can make use of your time as a novice -- for at least the first 6 months anyway I would strongly recommend sticking just to one modern, popular, general-purpose programming language. Python, Java or C# are all excellent choices, both in terms of learning to program as well as having plenty of job opportunities in those specific languages.

Learning multiple languages starts to become an interesting proposition once you're already feeling strong/confident in your "first" language and you're already happy that you have the depth of understanding of that, while also having strong computational-thinking and problem solving skills.

Whatever you do - keep on practicing. You can always find loads of sites like Leetcode, Project Euler, Hackerrank and others to challenge yourself and become a better thinker, a better problem solver, and use that to hone your programming skills. Personal projects are an excellent idea. I would suggest trying to build at least one large non-trivial project (something equivalent to a graduate's final-year software engineering project) which you can use as a way to practice, learn, get experience working with complex code and complex requirements, and also something to be proud of when you're trying to prove your skills in an interview.

There are a few core skills which you should also focus on as early as possible:
- Learn how to use your integrated development environment (IDE) - especially the debugger. A debugger takes about 15-20 minutes to learn and will save years of your life lost in frustration in trying to find errors/bugs, triage broken code, understand how/why code works in a particular way, etc.
- Get a "GitHub" account and get yourself into the habit of committing code to a git repository - use that for your projects. Git is a core skill in a lot of technical IT jobs, and isn't a huge topic to learn, although there is definitely a learning curve. Lots of tutorials and videos online explaining the basics.
- Avoid bad habits. Always write good, readable code even if it seems pointless. Get good at naming stuff, indentation/formatting (consistency is important!). get into the habit of breaking code down into small functions and avoid "monolithic" heavily-nested super-complex code. Clarity and simplicity are so much better than obscurity and complexity.


- Learn the various different "paradigms" and advanced features of the language. Object-Oriented programming and Functional Programming concepts are important. Different languages have quitea few different paradigms, for example, C# also has "Generic" programming, Event-Driven programming, Asynchronous Programming.

Make sure you're also confident with using your chosen programming languages to do some of the following:
- String manipulation (Maybe including some basic RegEx, but don't blow your brains out over that - RegEx is nice to know yet also really ugly/nasty)
- Data serialisation (e.g. data into XML or JSON format -- JSON is very useful, especially for web technologies)
- File I/O
- Exception handling and how to structure your code to handle errors gracefully.
- Multi-Threading, Concurrency, Parallelism and Asynchrony (all closely-related terms which are often inter-connected with each other)
- Basic Network programming. Also, working with HTTP is extremely useful - maybe try the Twitter API or something similar.

After that, look into Object-Oriented Design and Software Design Principles - i.e. the kinds of considerations which help you build large scale apps with thousands of lines of code without those apps turning into an unmanagable, tangled, web of spaghetti, or feeling like a wonky game of Jenga, or a "big ball of mud". You'd usually find interviewers are interested in seeing if you can cope with large projects because chances are an employer hiring you as a junior engineer would be throwing you into a lot of big, complicated projects -- Things like SOLID and GRASP principles are important to understand and be aware of, also common "OO Design Patterns" which you will find in a lot of commercial software projects like Repository Pattern and Model-View-Controller(MVC) pattern.

Leading on from software design principles, another absolutely essential skill is being able to write Automated tests for your code. Employers love to find programmers who understand automated tests and who appreciate the value in having the automated tests. Doing automated testing 'well' is actually not as easy as it sounds, and writing your code in a way which is easy-to-test can be challenging at first, so there's a whole sub-discipline of software engineering all about Unit Testing and Test-Driven Development

Once you're at an intermediate/comfortable stage of writing code, also I'd strongly recommend some of the really good sage wisdom in this book
https://www.amazon.co.uk/Code-Comple.../dp/0735619670
Don't be put off by the publication date, it's a book which stands the test of time -- the kind of "every programmer should know.." type wisdom which comes from years of experience writing code and doesn't really go out-of-date.

Databases are pretty much mandatory in the modern world. Data Modelling, Relational Database design, Database Normalisation and knowing SQL is going to help you a lot. Something that you would probably pick up as a by-product of learning web development too.

Some web development is also a great idea - that would usually mean focusing on a web framework for your chosen/preferred programming language. For example, C# uses ASP.NET. Java uses Spring. Python uses either Django or Flask.

If you're doing web development, then HTML and JavaScript are also inescapable beasts - HTML is a no-brainer if you can cope with programming (and CSS isn't a big deal either, but you need the basics). JavaScript is a little bit of a "quirky" language, and realistically it makes a really good choice as a second language after C# or Java or Python because it is the "programming language of the web". -- Also, these days people write Desktop and Mobile GUI apps using web technologies too.
Related to web development - Bootstrap and JQuery are the "bread and butter" libaries for front-end web development.

If you really want to jump further into web apps, then consider looking much deeper into it and get into the advanced, sophisticated world of writing fully-blown client-side web applications in ReactJS or Angular7 or VueJS

Some general IT skills with your O/S are also pretty much essential (Maybe take the opportunity to learn Linux if you aren't already familiar with it?) -- chances are that you'll encounter things like user logins, security, permissions, etc. (it's easy to write an app which can run-as-administrator. Requires a bit more careful thought when writing one which runs as a plain user -- e.g. apps running with standard user permissions aren't allowed to just write to any part of the hard disk nor can they access the Windows Registry, etc..)

Not required but also useful - the world is moving to Cloud Technologies. Maybe open up a free Microsoft Azure account and get some experience tinkering with azure services like the databases, web hosts, lambdas, identity, messaging, and loads of other cloud-based tools. Those cloud platforms allow you to put your own web apps up there -- managing your web server on that platform instead of a physical server or virtual machine.


In terms of getting a job - it's all about being able to show employers that you are the person who is going to be able to just do the job and cope -- they don't mind hiring people who lack commercial experience, but they will always want to be absolutely confident that you're a strong problem solver, proactive in learning and trying to figure stuff out for yourself, not phased by the need to spend all day googling to try to understand how stuff works and get to the root of a problem. A strong understanding of underlying programming concepts, logic, computational thinking and general technology. You should expect to be be asked technical questions on phone interviews, given programming problems to solve, asked to do a walkthrough of a project, maybe a "whiteboard" problem-solving task too

Something else you could do if you're interested is get yourself involved in some open-source projects - https://www.firsttimersonly.com/
Open source projects are often run by experienced software engineers and even businesses with an "open" policy on people being able to grab the code, add new features, fix bugs, get involved in the community, etc.

Keep an eye out on developer meetups too - lots of the big cities have programming communities who will do events where developers may meet up every month or two for talks, hackathons, tech previews, etc. Great opportunities for learning more, doing some social networking, and being part of that city's "dev community". e.g. meetup.com has things like C# groups, Java groups
Woah Thank you for this very helpful and detailed. I'll definitely start learning these things one step at a time Wish I could give you multiple reps
0
reply
X

Quick Reply

Attached files
Write a reply...
Reply
new posts

All the exam results help you need

1,069

people online now

225,530

students helped last year
Latest
My Feed

See more of what you like on
The Student Room

You can personalise what you see on TSR. Tell us a little about yourself to get started.

Personalise

University open days

  • University of Dundee
    Undergraduate Open Day Undergraduate
    Mon, 26 Aug '19
  • University of Aberdeen
    General Open Day Undergraduate
    Tue, 27 Aug '19
  • Norwich University of the Arts
    Postgraduate (MA) Open Day Postgraduate
    Sat, 31 Aug '19

How are you feeling about GCSE Results Day?

Hopeful (213)
12.72%
Excited (151)
9.02%
Worried (303)
18.1%
Terrified (374)
22.34%
Meh (155)
9.26%
Confused (37)
2.21%
Putting on a brave face (229)
13.68%
Impatient (212)
12.66%

Watched Threads

View All