The Student Room Group

Help me with a career change into Software Engineering

Long story short

Got a 2:1 in BSc Maths from Russell Group Uni. Hands down, THE most overrated degree and is complete mickey mouse in the working world. No one gives a toss about abstract algebra with no usefulness in the real world!

Wish I stuck with an old concept in my mind of becoming a programmer and doing BSc Comp Sci but early twenties to learn programming is not too late... I guess.

So, essentially, I need anyone who is up to date with the current job market in software engineering related careers.

I'm guessing that Java and C++ are seen as the most ''useful'' ones to get a grasp of.

However, in terms of job prospects, which is the most desired for the modern day? Obviously, this will depend on application but the aim is to open as much doors as possible.

I am also assuming learning MySQL and JavaScript on top of either Java/C++ is a necessity?

All of the above are assumptions based on some research - please correct if needed.

Finally and most importantly - learning materials.

I am using SoloLearn on my phone and a tutorial playlist on YouTube. A guy named ''Bucky'' is well known for having good tutorials but his Java one is 8-9 years old. Is it still good enough? i.e. not much has changed in the last 8-9 years to make it so.

I'm going to try and dig deep as much as possible for the next 3 months, add programming into my CV and apply for jobs on a part-time basis, full time if possible and at the same time apply for bigger graduate schemes. So the latter applications have evidence of experience from the part time roles.

Plan decent, or have I missed out too many important things? Self-learning can be bad if not applied properly so thought it was best to ask here before I realise mistakes 6 months down the line.
Reply 1
Finally, is it worth investing in a MSc Comp Sci Degree from a Russel Group Uni now? Still have a bit of time to get in for 18/19...
Original post by Curious_G
Long story short

Got a 2:1 in BSc Maths from Russell Group Uni. Hands down, THE most overrated degree and is complete mickey mouse in the working world. No one gives a toss about abstract algebra with no usefulness in the real world!

Wish I stuck with an old concept in my mind of becoming a programmer and doing BSc Comp Sci but early twenties to learn programming is not too late... I guess.

So, essentially, I need anyone who is up to date with the current job market in software engineering related careers.

I'm guessing that Java and C++ are seen as the most ''useful'' ones to get a grasp of.

However, in terms of job prospects, which is the most desired for the modern day? Obviously, this will depend on application but the aim is to open as much doors as possible.

I am also assuming learning MySQL and JavaScript on top of either Java/C++ is a necessity?

All of the above are assumptions based on some research - please correct if needed.

Finally and most importantly - learning materials.

I am using SoloLearn on my phone and a tutorial playlist on YouTube. A guy named ''Bucky'' is well known for having good tutorials but his Java one is 8-9 years old. Is it still good enough? i.e. not much has changed in the last 8-9 years to make it so.

I'm going to try and dig deep as much as possible for the next 3 months, add programming into my CV and apply for jobs on a part-time basis, full time if possible and at the same time apply for bigger graduate schemes. So the latter applications have evidence of experience from the part time roles.

Plan decent, or have I missed out too many important things? Self-learning can be bad if not applied properly so thought it was best to ask here before I realise mistakes 6 months down the line.

I'm currently working as a software engineering degree apprentice at a top management consultancy firm so I can kind of provide some insight on what is desirable and on demand.

> I was recommended by one of my senior colleagues when I was first starting out programming in Java to use "HackerRank" - it's quite similar to SoloLearn but you're able to practise coding, compete and find jobs.

> Use IDE's such as NetBeans & Eclipse - these are widely used ALSO try and create your own projects, build a calculator OR a basic user entry form

> I would recommend learning either: Java, JavaScript, Python (Python is considered one of the easiest programming languages), PHP, SQL, AngularJS, React.js and the concept of DevOps - from what I've observed, this is whats on demand at the moment

> Do an online course - a lot of colleagues have used Udemy to learn how to program - https://www.udemy.com/java-tutorial/

> Get some Work experience!! I did 2 weeks work experience in the IT department at British Red Cross HQ in Moorgate during my 2nd year of sixth form.

> Many companies prefer people who are self-taught due to the fact it shows that the individual is dedicated to learn

> For learning JavaScript, I would recommend using https://www.w3schools.com/

> CodeAcademy is also good for learning how to code - https://www.codecademy.com/
(edited 5 years ago)
Reply 3
Original post by squirrology
I'm currently working as a software engineering degree apprentice at a top management consultancy firm so I can kind of provide some insight on what is desirable and on demand.

> I was recommended by one of my senior colleagues when I was first starting out programming in Java to use "HackerRank" - it's quite similar to SoloLearn but you're able to practise coding, compete and find jobs.

> Use IDE's such as NetBeans & Eclipse - these are widely used ALSO try and create your own projects, build a calculator OR a basic user entry form

> I would recommend learning either: Java, JavaScript, Python (Python is considered one of the easiest programming languages), PHP, SQL, AngularJS, React.js and the concept of DevOps - from what I've observed, this is whats on demand at the moment

> Do an online course - a lot of colleagues have used Udemy to learn how to program - https://www.udemy.com/java-tutorial/

> Get some Work experience!! I did 2 weeks work experience in the IT department at British Red Cross HQ in Moorgate during my 2nd year of sixth form.

> Many companies prefer people who are self-taught due to the fact it shows that the individual is dedicated to learn

> For learning JavaScript, I would recommend using https://www.w3schools.com/

> CodeAcademy is also good for learning how to code - https://www.codecademy.com/


Legend, thanks! Seems like Java is the big one, just got SDK and Eclipse installed and learning is actually fun!
I'm working as a software engineer, so I'll add my 2p.

On SQL - there are lots of different 'flavours' depending on the vendor/implementation, including Oracle, MySQL, MariaDB, SQL Server, Firebird, PostgreSQL, SQLite, and many more. SQL itself is possibly the most widely-used language in software engineering because it's the defacto "language of databases" and transcends all other technologies (i.e. when you're writing any kind of app, SQL is probably involved somewhere); the vendor you choose to learn with doesn't matter too much. Databases are hugely important nonetheless.

JavaScript is only necessary if you're interested in web development. Realistically many enterprise apps these days tend to have a web front-end, so in addition to JavaScript you'd also be looking at HTML, CSS, JQuery (JavaScript library) and Bootstrap (CSS Library) as being the technologies that most employers would expect you to be familiar with for web development.

Java is a general-purpose language very similar to C# - both are very widely applicable to a whole range of different kinds of software. Commercial and enterprise software development is fairly evenly split between Java and C# but the skills from one are comfortably transferrable to the other. People developing front-end web apps frequently write their back-end services using either one of those languages.

Java is also the de-facto language of Android (there are others, but if Android app development interests you then Java is the obvious language to pick up)

One thing worth mentioning is that the libraries and frameworks which come with those languages are important too once you're already confident in the language itself. For Java that would be things like Spring Boot, JavaFx and the Android toolkit. For C# it's ASP.NET, Entity Framework, and maybe Xamarin or WPF.

Also, for any programming language, you'd also want to learn about things like Lists/Dictionaries, File I/O, String manipulation, Threading/Concurrency, Regular Expressions, Data Serialisation with XML/JSON, Network programming and using Numeric libraries.

C++ is fairly important in game development and systems/hardware programming (e.g. robotics), however C++ has otherwise become rather a 'niche' language in that regard. I wouldn't prioritise C++ any time soon unless game development or hardware programming is something which specifically interests you. Very few people these days still write apps or web services in C++ because the likes of Java and C# are so much better at that kind of thing


As for courses, you could try some of these - they're all free as long as you click the right links
(Everything on EdX and Coursera can be accessed for free, and most things on Udacity can be accessed for free too, but the links for doing so are less obvious - however the content on these sites is developed by large tech companies who are writing courses for their own tech, or global top universities who are making their undergraduate content available for free online).

Software development series focused on full-stack web development and Java, by Duke University in North Carolina:

(You need to enrol on individual courses and click the 'Audit' link rather than the one which asks you for a free trial/pay) - This covers a lot of software development skills - unfortunately it uses a slightly weird IDE called BlueJ but otherwise the content is pretty good. (If you want a better IDE for Java then grab JetBrains IntelliJ instead, you'll be able to do most of the content using IntelliJ)

Another software engineering series from University of British Columbia:

(Again, click individual courses and audit them, and avoid the paid certificate buttons). This course focuses on core programming skills to begin with using a 'beginner' language - the lecturers have taken the approach of beginning by teaching how to "be a programmer" by focusing on using the beginner language to solve problems in the first 2 courses, before later moving on in the 3rd/4th courses to using Java to build bigger, more complex apps - its a very different approach compared with the Duke course, but both of them aim to teach a broader range of software development skills than just a language.


You could have a look at Google's Android development course if Android apps interest you - (it's specifically about writing android apps so assumes you already know Java, although Udacity has an a free intro java course too, but their java course is just about the Java language)


For C#, there's Microsoft Courses here (In this order - Again, don't click the buttons for the paid certificates):


Course on relational databases from Georgia Tech. It goes beyond just teaching SQL and covers the important conceptual aspects of database design too:
(edited 5 years ago)
Reply 5
Original post by winterscoming
I'm working as a software engineer, so I'll add my 2p.

On SQL - there are lots of different 'flavours' depending on the vendor/implementation, including Oracle, MySQL, MariaDB, SQL Server, Firebird, PostgreSQL, SQLite, and many more. SQL itself is possibly the most widely-used language in software engineering because it's the defacto "language of databases" and transcends all other technologies (i.e. when you're writing any kind of app, SQL is probably involved somewhere); the vendor you choose to learn with doesn't matter too much. Databases are hugely important nonetheless.

JavaScript is only necessary if you're interested in web development. Realistically many enterprise apps these days tend to have a web front-end, so in addition to JavaScript you'd also be looking at HTML, CSS, JQuery (JavaScript library) and Bootstrap (CSS Library) as being the technologies that most employers would expect you to be familiar with for web development.

Java is a general-purpose language very similar to C# - both are very widely applicable to a whole range of different kinds of software. Commercial and enterprise software development is fairly evenly split between Java and C# but the skills from one are comfortably transferrable to the other. People developing front-end web apps frequently write their back-end services using either one of those languages.

Java is also the de-facto language of Android (there are others, but if Android app development interests you then Java is the obvious language to pick up)

One thing worth mentioning is that the libraries and frameworks which come with those languages are important too once you're already confident in the language itself. For Java that would be things like Spring Boot, JavaFx and the Android toolkit. For C# it's ASP.NET, Entity Framework, and maybe Xamarin or WPF.

Also, for any programming language, you'd also want to learn about things like Lists/Dictionaries, File I/O, String manipulation, Threading/Concurrency, Regular Expressions, Data Serialisation with XML/JSON, Network programming and using Numeric libraries.

C++ is fairly important in game development and systems/hardware programming (e.g. robotics), however C++ has otherwise become rather a 'niche' language in that regard. I wouldn't prioritise C++ any time soon unless game development or hardware programming is something which specifically interests you. Very few people these days still write apps or web services in C++ because the likes of Java and C# are so much better at that kind of thing


As for courses, you could try some of these - they're all free as long as you click the right links
(Everything on EdX and Coursera can be accessed for free, and most things on Udacity can be accessed for free too, but the links for doing so are less obvious - however the content on these sites is developed by large tech companies who are writing courses for their own tech, or global top universities who are making their undergraduate content available for free online).

Software development series focused on full-stack web development and Java, by Duke University in North Carolina:

(You need to enrol on individual courses and click the 'Audit' link rather than the one which asks you for a free trial/pay) - This covers a lot of software development skills - unfortunately it uses a slightly weird IDE called BlueJ but otherwise the content is pretty good. (If you want a better IDE for Java then grab JetBrains IntelliJ instead, you'll be able to do most of the content using IntelliJ)

Another software engineering series from University of British Columbia:

(Again, click individual courses and audit them, and avoid the paid certificate buttons). This course focuses on core programming skills to begin with using a 'beginner' language - the lecturers have taken the approach of beginning by teaching how to "be a programmer" by focusing on using the beginner language to solve problems in the first 2 courses, before later moving on in the 3rd/4th courses to using Java to build bigger, more complex apps - its a very different approach compared with the Duke course, but both of them aim to teach a broader range of software development skills than just a language.


You could have a look at Google's Android development course if Android apps interest you - (it's specifically about writing android apps so assumes you already know Java, although Udacity has an a free intro java course too, but their java course is just about the Java language)


For C#, there's Microsoft Courses here (In this order - Again, don't click the buttons for the paid certificates):


Course on relational databases from Georgia Tech. It goes beyond just teaching SQL and covers the important conceptual aspects of database design too:



Wow amazing, thank you so much. Should seriously be a post in a sticky or something so others can benefit easily too.

In your opinion, is doing a MSc in Comp Sci a waste of time and that self-learning, alongside the right people if possible, you can still get your foot in the door? My biggest concern is lacking any type of programming work experience, have a month of IT from work experience (basic building computers, setting up LANs etc.). I got work experience from other walks of life with transferable skills regarding teamwork etc. but nothing in coding.
Original post by Curious_G
Wow amazing, thank you so much. Should seriously be a post in a sticky or something so others can benefit easily too.

In your opinion, is doing a MSc in Comp Sci a waste of time and that self-learning, alongside the right people if possible, you can still get your foot in the door? My biggest concern is lacking any type of programming work experience, have a month of IT from work experience (basic building computers, setting up LANs etc.). I got work experience from other walks of life with transferable skills regarding teamwork etc. but nothing in coding.


I wouldn't go as far as calling an MSc a waste of time but by the same token you can definitely teach yourself all of the same skills from MOOCs like those above and set yourself a decent-sized personal project to work on for several months to arrive in the same place, probably taking around the same amount of time without paying the tuition fees -- employers value technical skills above all else.

Lacking work experience will make things harder when you're competing against graduates who have a 12-month work placement under their belt, but focusing on becoming a competent developer, learning some frameworks and building 1 or 2 decent-sized non-trivial projects using those skills can compensate for a lot of that. For example, maybe a Spotify clone or a mobile game using Android studio. Or maybe building up a website, learning a framework like Spring Boot, a few APIs like Twitter/Facebook, learning unit-testing, etc - think of the kind of projects CompSci grads can take to an interview from their FYP and you get the idea.

Another brilliant way to get experience without a work placement once you're more comfortable with programming is to get yourself involved in some open source projects - the kinds of challenges you'll encounter with open source software are very similar to the kinds of challenges you'd face in a commerical environment.
https://www.firsttimersonly.com/
https://opensource.guide/how-to-contribute/

I'd also point out that despite your misgivings about your Maths degree, a 2:1 from a RG university implies competency in critical thinking, analytical and problem solving skills, all of which is are important as a programmer. Other work experience with transferrable skills certainly count for something - employers strongly prefer well-rounded people, so attitude, enthusiasm, teamworking and communication is worth several lines at the end of your CV.

I don't think doing a masters is a bad idea however; some Masters degrees also include an industrial placement, although that's an extra year on top, and theres' the tuition fees too. Either way, employers who want to see tangible evidence that you're able to take a complex problem and deliver some good, robust, working software at the end, that you understand technology, as well as the core principles of software engineering -- basically looking for anything which will give them confidence that you'll be able to cope with the job.
(edited 5 years ago)
Reply 7
Original post by winterscoming
I wouldn't go as far as calling an MSc a waste of time but by the same token you can definitely teach yourself all of the same skills from MOOCs like those above and set yourself a decent-sized personal project to work on for several months to arrive in the same place, probably taking around the same amount of time without paying the tuition fees -- employers value technical skills above all else.

Lacking work experience will make things harder when you're competing against graduates who have a 12-month work placement under their belt, but focusing on becoming a competent developer, learning some frameworks and building 1 or 2 decent-sized non-trivial projects using those skills can compensate for a lot of that. For example, maybe a Spotify clone or a mobile game using Android studio. Or maybe building up a website, learning a framework like Spring Boot, a few APIs like Twitter/Facebook, learning unit-testing, etc - think of the kind of projects CompSci grads can take to an interview from their FYP and you get the idea.

Another brilliant way to get experience without a work placement once you're more comfortable with programming is to get yourself involved in some open source projects - the kinds of challenges you'll encounter with open source software are very similar to the kinds of challenges you'd face in a commerical environment.
https://www.firsttimersonly.com/
https://opensource.guide/how-to-contribute/

I'd also point out that despite your misgivings about your Maths degree, a 2:1 from a RG university implies competency in critical thinking, analytical and problem solving skills, all of which is are important as a programmer. Other work experience with transferrable skills certainly count for something - employers strongly prefer well-rounded people, so attitude, enthusiasm, teamworking and communication is worth several lines at the end of your CV.

I don't think doing a masters is a bad idea however; some Masters degrees also include an industrial placement, although that's an extra year on top, and theres' the tuition fees too. Either way, employers who want to see tangible evidence that you're able to take a complex problem and deliver some good, robust, working software at the end, that you understand technology, as well as the core principles of software engineering -- basically looking for anything which will give them confidence that you'll be able to cope with the job.


Again, you have my gratitude , PRSOM

I have chosen to go the self-taught route due to having more freedom in, eventually and hopefully, creating my own stuff to show off.

Covered nearly a third of cave of programming's tutorials in 4 days at the point now where I can make simple programs like a calc which can use every operator, a sales / original price of items calc, a count-down singing song thing...

There are so many roles which advertise themselves as ''Junior''

For something like below:

https://www.cwjobs.co.uk/job/junior-software-developer/understanding-recruitment-job82044475

How much do I really need to know? Obviously, there is no limit to learning. But when a job asks something like ''good knowledge of OOP'' how good does good have to be, hope I'm making sense here.
Like anything, best way is to do things in an actual job.

I got Head First Java - still a good book you reckon despite it's age? Core Java is another book on it's way.
Original post by Curious_G
Again, you have my gratitude , PRSOM

I have chosen to go the self-taught route due to having more freedom in, eventually and hopefully, creating my own stuff to show off.

Covered nearly a third of cave of programming's tutorials in 4 days at the point now where I can make simple programs like a calc which can use every operator, a sales / original price of items calc, a count-down singing song thing...

There are so many roles which advertise themselves as ''Junior''

For something like below:

https://www.cwjobs.co.uk/job/junior-software-developer/understanding-recruitment-job82044475

How much do I really need to know? Obviously, there is no limit to learning. But when a job asks something like ''good knowledge of OOP'' how good does good have to be, hope I'm making sense here.
Like anything, best way is to do things in an actual job.

I got Head First Java - still a good book you reckon despite it's age? Core Java is another book on it's way.

Headfirst Java is a little bit dated in as much as it's missing all of the advances from the last 3 major releases of Java, but it's still good as an introductory programming book - keep on going with it; it won't teach you any 'modern' Java, but the basics haven't changed much.

I can't remember what IDE/Tools that book gets you to use if any at all, but I think it predates JetBrains IntelliJ, which tends to be the most human-friendly IDE these days (You can get a free 'community edition' download for IntelliJ, and I'd recommend installing that rather than Eclipse/Netbeans/BlueJ -- the tooling is just so much nicer to use - also make sure that you follow the IntelliJ debugger/breakpoints tutorials too).

As for how much you need to know, it's a case of being a competent programmer so computational thinking and having a strong problem-solving mindset is absolutely key - i.e. being able to take difficult problems then devise an algorithmic solution. I'm not necessarily sure that Headfirst Java will give you enough practice in problem solving, but that's OK. When you reach the end of that book you could head over to a website like ProjectEuler and challenge yourself: https://projecteuler.net/archives

The other side is being able to use all the main libraries, classes and standard features of the Java language - If you can get through Headfirst Java, then you've got enough of the basics to focus your attention on some Android courses or maybe some tutorials for building web apps using Spring Boot. Those things come with their own interesting challenges - for example, if you're writing web apps in Java with Spring Boot then there's a tonne of 'magic' going on under the hood which you'll need to learn about sooner or later, and you could easily spend weeks trying to get your head around that stuff, but it's really handy to know because web apps are used in a lot of places (and it naturally leads to other topics such as SQL databases and front-end web development).


In addition to being able to write your own code, you should also able to reason over other peoples code - including being able to see how and why that code works, how it fits together, and able to make changes to fix bugs and/or extend its functionality - obviously you can get plenty of free code from the internet, and it's a good test to be able to pick something up and pick it apart until you know how it works. (Maybe look at open source projects too)

As a really 'rough' finger-in-air estimate, I'd say you're looking at spending at least 1000 hours of good quality, focused time either working through books/courses and on your own projects in order to get past the 'beginner' stage - but obviously everyone is different - just some of the jargon can be pretty impenetrable at first; there's so much information out there written by programmers, but much of it isn't clearly explained in plain-simple English, so you've got that hurdle to jump over as well - it's essential to understand the plethora of terminology and jargon which you'd find in all kinds of programming documentation so that you're able to effectively navigate through Google/StackOverflow/offical docs/etc. There's also tools - particularly the debugger (breakpoints are essential) and 'Git' (source control).

When it comes to trying to get your head inside the jargon, it could help to follow online blogs about programming or get involved in programming forums or StackOverflow to assymilate into the online "programmer culture" (Careful, programmers aren't known for their people-skills..). Over time you'll hopefully start to pick up some of those ideas; whether they're about things that other novice programmers are learning, or seasoned programmers blogging about their latest code adventures and ideas, after a while it'll hopefully start to seem less alien.

A 'good knowledge of OOP' is a bit fuzzy because OOP itself is a paradigm (i.e. a mindset or way of thinking about code structure) so as with most things in software, your understanding will grow and evolve over time as you spend more time trying to wrap your head around the ideas, figure out why they're useful, and put them into practice ("knowledge" is probably a poor choice of words because it's far deeper than that).

Most technical interviewers will want to see understanding of the implications of OOP and the way your OOP-mindset influences the way you think about and write code. Similarly, having that understanding is important for being comfortable reading someone else's object-oriented code whose structure may appear at first to be rather complex and difficult to follow - so it's also about being able to appreciate the reasons for structuring it in that way, as well as being able to take a complex problem for yourself and being able to split the solution into logically-sensible classes/functions.

At the basic level, you'd be expected to know things like Polymorphism, Constructors, difference between Public/Private -- this stuff is fundamental and necessary from a technical point of view.

Interviewers would probably want to "probe" your understanding of some much deeper OO ideas too; e.g. some potentially quite open-ended questions which would ideally lead to slightly longer answers and maybe some discussion to show what sort of level you're at:

What are the similarities and differences between Inheritance and Composition and what are their trade-offs?

Can you explain the concept of dependency injection and what problem it's intended to solve?

What does it mean to 'code to an interface' and how might that approach affect the design of your code?

Could you describe the MVC pattern and why you might use it?


Don't worry if those kinds of ideas are over your head right now -- I wouldn't necessarily expect Computer Science graduates to be able to provide 100% complete answers to those questions, but OO is a pretty deep topic and a way to really stand out is by being the person who is comfortable talking about this in an interview.
(edited 5 years ago)
Reply 9
Original post by winterscoming
Headfirst Java is a little bit dated in as much as it's missing all of the advances from the last 3 major releases of Java, but it's still good as an introductory programming book - keep on going with it; it won't teach you any 'modern' Java, but the basics haven't changed much.

I can't remember what IDE/Tools that book gets you to use if any at all, but I think it predates JetBrains IntelliJ, which tends to be the most human-friendly IDE these days (You can get a free 'community edition' download for IntelliJ, and I'd recommend installing that rather than Eclipse/Netbeans/BlueJ -- the tooling is just so much nicer to use - also make sure that you follow the IntelliJ debugger/breakpoints tutorials too).

As for how much you need to know, it's a case of being a competent programmer so computational thinking and having a strong problem-solving mindset is absolutely key - i.e. being able to take difficult problems then devise an algorithmic solution. I'm not necessarily sure that Headfirst Java will give you enough practice in problem solving, but that's OK. When you reach the end of that book you could head over to a website like ProjectEuler and challenge yourself: https://projecteuler.net/archives

The other side is being able to use all the main libraries, classes and standard features of the Java language - If you can get through Headfirst Java, then you've got enough of the basics to focus your attention on some Android courses or maybe some tutorials for building web apps using Spring Boot. Those things come with their own interesting challenges - for example, if you're writing web apps in Java with Spring Boot then there's a tonne of 'magic' going on under the hood which you'll need to learn about sooner or later, and you could easily spend weeks trying to get your head around that stuff, but it's really handy to know because web apps are used in a lot of places (and it naturally leads to other topics such as SQL databases and front-end web development).


In addition to being able to write your own code, you should also able to reason over other peoples code - including being able to see how and why that code works, how it fits together, and able to make changes to fix bugs and/or extend its functionality - obviously you can get plenty of free code from the internet, and it's a good test to be able to pick something up and pick it apart until you know how it works. (Maybe look at open source projects too)

As a really 'rough' finger-in-air estimate, I'd say you're looking at spending at least 1000 hours of good quality, focused time either working through books/courses and on your own projects in order to get past the 'beginner' stage - but obviously everyone is different - just some of the jargon can be pretty impenetrable at first; there's so much information out there written by programmers, but much of it isn't clearly explained in plain-simple English, so you've got that hurdle to jump over as well - it's essential to understand the plethora of terminology and jargon which you'd find in all kinds of programming documentation so that you're able to effectively navigate through Google/StackOverflow/offical docs/etc. There's also tools - particularly the debugger (breakpoints are essential) and 'Git' (source control).

When it comes to trying to get your head inside the jargon, it could help to follow online blogs about programming or get involved in programming forums or StackOverflow to assymilate into the online "programmer culture" (Careful, programmers aren't known for their people-skills..). Over time you'll hopefully start to pick up some of those ideas; whether they're about things that other novice programmers are learning, or seasoned programmers blogging about their latest code adventures and ideas, after a while it'll hopefully start to seem less alien.

A 'good knowledge of OOP' is a bit fuzzy because OOP itself is a paradigm (i.e. a mindset or way of thinking about code structure) so as with most things in software, your understanding will grow and evolve over time as you spend more time trying to wrap your head around the ideas, figure out why they're useful, and put them into practice ("knowledge" is probably a poor choice of words because it's far deeper than that).

Most technical interviewers will want to see understanding of the implications of OOP and the way your OOP-mindset influences the way you think about and write code. Similarly, having that understanding is important for being comfortable reading someone else's object-oriented code whose structure may appear at first to be rather complex and difficult to follow - so it's also about being able to appreciate the reasons for structuring it in that way, as well as being able to take a complex problem for yourself and being able to split the solution into logically-sensible classes/functions.

At the basic level, you'd be expected to know things like Polymorphism, Constructors, difference between Public/Private -- this stuff is fundamental and necessary from a technical point of view.

Interviewers would probably want to "probe" your understanding of some much deeper OO ideas too; e.g. some potentially quite open-ended questions which would ideally lead to slightly longer answers and maybe some discussion to show what sort of level you're at:

What are the similarities and differences between Inheritance and Composition and what are their trade-offs?

Can you explain the concept of dependency injection and what problem it's intended to solve?

What does it mean to 'code to an interface' and how might that approach affect the design of your code?

Could you describe the MVC pattern and why you might use it?


Don't worry if those kinds of ideas are over your head right now -- I wouldn't necessarily expect Computer Science graduates to be able to provide 100% complete answers to those questions, but OO is a pretty deep topic and a way to really stand out is by being the person who is comfortable talking about this in an interview.



Please rate some other members before rating this member again => Me : -_-

I'm getting the hang of it and damn, wish someone introduced me ( by forcing me) to get into programming 5 years ago!

I find that like maths, the only real way to '' git gud '' with this all is to actually DO problems and solve them.

Making basic programs has been helpful. I'm looking for resources that, say, have a lot of code AND explain what is happening throughout the code? e.g. is there a program online which shows java code for making a simple budget calculator or something

codingbat is decent but, it eventually starts showing solutions without an explantion of what is happening

I'm hoping that by, looking at such programs, typing it out as a go along slowly and trying to digest everything , sooner or later everything will just ''click''. At this point, I will be one happy dude.

Same thing happened with A level maths personally - at the start I was not given good teaching of it unfortunately but somewhere down the line, everything just ''clicked'' and it was during a time where I kept tackling questions and looking at the logic behind the answers.
Original post by Curious_G
Please rate some other members before rating this member again => Me : -_-

I'm getting the hang of it and damn, wish someone introduced me ( by forcing me) to get into programming 5 years ago!

I find that like maths, the only real way to '' git gud '' with this all is to actually DO problems and solve them.

Making basic programs has been helpful. I'm looking for resources that, say, have a lot of code AND explain what is happening throughout the code? e.g. is there a program online which shows java code for making a simple budget calculator or something

codingbat is decent but, it eventually starts showing solutions without an explantion of what is happening

I'm hoping that by, looking at such programs, typing it out as a go along slowly and trying to digest everything , sooner or later everything will just ''click''. At this point, I will be one happy dude.

Same thing happened with A level maths personally - at the start I was not given good teaching of it unfortunately but somewhere down the line, everything just ''clicked'' and it was during a time where I kept tackling questions and looking at the logic behind the answers.

Spot on with the comparison to maths - it's all about the practice!

You could try some of the examples in the Java tutorials from Princeton - there's some good tutorials here and tonnes of complete examples with some commenting in them:
https://introcs.cs.princeton.edu/java/home/

(Note - if you want to actually run the Princeton examples you need their library - https://introcs.cs.princeton.edu/java/stdlib/ )


But when it comes to trying to see exactly what's going on in code the best way to do it is to paste the code into the IDE and set breakpoints - This allows you to use the debugger to manually step over each line in the code from the breakpoint onward. The IDE will highlight the current line, and it will show the values of all your variables each time you step to the next line, so you can and see the exact 'flow' of the program and watch how the variables change as well.
https://stackoverflow.com/questions/4733835/how-to-use-breakpoints-in-eclipse
(edited 5 years ago)
Reply 11
Original post by winterscoming
Spot on with the comparison to maths - it's all about the practice!

You could try some of the examples in the Java tutorials from Princeton - there's some good tutorials here and tonnes of complete examples with some commenting in them:
https://introcs.cs.princeton.edu/java/home/

(Note - if you want to actually run the Princeton examples you need their library - https://introcs.cs.princeton.edu/java/stdlib/ )


But when it comes to trying to see exactly what's going on in code the best way to do it is to paste the code into the IDE and set breakpoints - This allows you to use the debugger to manually step over each line in the code from the breakpoint onward. The IDE will highlight the current line, and it will show the values of all your variables each time you step to the next line, so you can and see the exact 'flow' of the program and watch how the variables change as well.
https://stackoverflow.com/questions/4733835/how-to-use-breakpoints-in-eclipse


Excellent, I had a look through that site, unfortunately I think delving into using other libraries would be a bit too much at this stage! Metaphorically, I guess that libraries are collections of class, objects etc. which can be used anywhere when a new class is made e.g. Math.random() is an example of a ''built-in'' object with a method from the standard Java library, which can be used any time.

Am I along the right lines with my understanding? If not, correct me

The web site does have examples that I'm looking for but if there's another resource which has examples to work through and doesn't need any add-ons, that would be great! If not, no worries I can probably dig something out but, I'm following winterscoming recommendations by the book :P

Yeah thanks for the reassurance regarding break points, I started using them from day one of learning since I know employers keep asking for such knowledge in job descriptions/
Original post by Curious_G
Excellent, I had a look through that site, unfortunately I think delving into using other libraries would be a bit too much at this stage! Metaphorically, I guess that libraries are collections of class, objects etc. which can be used anywhere when a new class is made e.g. Math.random() is an example of a ''built-in'' object with a method from the standard Java library, which can be used any time.

Am I along the right lines with my understanding? If not, correct me

The web site does have examples that I'm looking for but if there's another resource which has examples to work through and doesn't need any add-ons, that would be great! If not, no worries I can probably dig something out but, I'm following winterscoming recommendations by the book :P

Yeah thanks for the reassurance regarding break points, I started using them from day one of learning since I know employers keep asking for such knowledge in job descriptions/

Again, spot on with your understanding of libraries. Princeton's library is available in the form of a downloadable ',jar' file (abbreviation for Java ARchive) which you can easily import to use in your project (See this page about dropping it into a 'lib' folder and then adding it to the build path) -
https://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29

I understand your hesitation to use other libraries, particularly given the overwhelming number of classes already built-in to Java's standard library, although the Princeton ones are generally aimed at people learning Java as a new language, they don't appear to be very heavy-weight anyway.

I don't know of any other good Java examples off the top of my head; usually the best way to find example code is to find open-source projects but those will almost certainly use all kinds of libraries. .

Otherwise, you could also dig through the extensive Q+A archives of StackOverflow for examples of specific features of the Java language. Usually wherever you find highly-upvoted answers on StackOverflow they're from people who have done a good job of providing a comprehensive answer with a good explanation of how/why some code works in a particular way.

Latest

Trending

Trending