The Student Room Group

I want to be a software engineer

I want to be a software engineer working for Google or something and I was thinking if it would be good if I program something. I'm not sure what program language would be best to use and any suggestions for what I can do would be helpful. Thanks

Scroll to see replies

Firstly, you're going to need to put a huge amount of effort into reaching a point where you'll be competitive at job interviews for the top tech companies (Google/Apple/etc. have thousands of people applying to them every year - obviously they can only hire a tiny fraction of those people). That's a good goal to keep in mind though, but if you're just starting out learning to program then you need to focus on the core problem solving skills.

It really doesn't matter which programming language you start out with; a programming language is just a tool -- programming itself isn't about the language, it's about learning how to think computationally -- i.e. thinking in terms of logic, thinking about information terms of 1s-and-0s, and thinking in terms of step-by-step algorithms using programming language constructs. Equally important to this are your analytical and problem solving skills - i.e. being able to take a very difficult problem, break it down, and think your way around a model of a solution, then iterate on that solution until it's "right".

One of the best places to start for learning the core programming and problem solving skills is Harvard University's introductory computer science course called CS50:
https://www.edx.org/course/cs50s-introduction-to-computer-science
(You can access everything for free here -- when you're given the option to enrol on the course, choose "audit" and you can bypass the paid-for certificates, which you don't need).

There's probably 100+ hours of learning here - the most important thing being the time you spend on the problem sets practicing thinking around those problems; ultimately the thing which will help you move from a coding newbie to competent programmer will be the time you spend practicing solving problems.

Once you're done with CS50, it'd be a good idea to look at some of the follow-up CS50 courses too - again, all of these are free if you audit them: https://www.edx.org/course?search_query=cs50

It's also worth checking out sites like Project Euler, Hackerrank and Leetcode for more places to practice your problem solving skills.

Building something is also a good idea as well, and a great way to practice once you're feeling confident with the core programming skills -- if you can't think of something to build, then consider looking into areas like AI, Machine Learning, Internet of Things, etc. Also consider looking at any apps you use yourself and think about how you would write your own version of one of those apps (e.g. how would you write a social meda app with things like user profiles, messaging, links to facebook login, etc)

Lastly, the most valuable skill you can learn early is Google'ing for information, (particularly if that leads to information on StackOverflow) - when you're facing something difficult that you don't understand, then it often helps to dig for information from multiple different sources (whether those websites, blogs, other tutorials, youtube videos, other courses, etc. A single source of information is rarely enough by itself)
(edited 4 years ago)
Reply 2
Original post by winterscoming
Firstly, you're going to need to put a huge amount of effort into reaching a point where you'll be competitive at job interviews for the top tech companies (Google/Apple/etc. have thousands of people applying to them every year - obviously they can only hire a tiny fraction of those people). That's a good goal to keep in mind though, but if you're just starting out learning to program then you need to focus on the core problem solving skills.

It really doesn't matter which programming language you start out with; a programming language is just a tool -- programming itself isn't about the language, it's about learning how to think computationally -- i.e. thinking in terms of logic, thinking about information terms of 1s-and-0s, and thinking in terms of step-by-step algorithms using programming language constructs. Equally important to this are your analytical and problem solving skills - i.e. being able to take a very difficult problem, break it down, and think your way around a model of a solution, then iterate on that solution until it's "right".

One of the best places to start for learning the core programming and problem solving skills is Harvard University's introductory computer science course called CS50:
https://www.edx.org/course/cs50s-introduction-to-computer-science
(You can access everything for free here -- when you're given the option to enrol on the course, choose "audit" and you can bypass the paid-for certificates, which you don't need).

There's probably 100+ hours of learning here - the most important thing being the time you spend on the problem sets practicing thinking around those problems; ultimately the thing which will help you move from a coding newbie to competent programmer will be the time you spend practicing solving problems.

Once you're done with CS50, it'd be a good idea to look at some of the follow-up CS50 courses too - again, all of these are free if you audit them: https://www.edx.org/course?search_query=cs50

It's also worth checking out sites like Project Euler, Hackerrank and Leetcode for more places to practice your problem solving skills.

Building something is also a good idea as well, and a great way to practice once you're feeling confident with the core programming skills -- if you can't think of something to build, then consider looking into areas like AI, Machine Learning, Internet of Things, etc. Also consider looking at any apps you use yourself and think about how you would write your own version of one of those apps (e.g. how would you write a social meda app with things like user profiles, messaging, links to facebook login, etc)

Lastly, the most valuable skill you can learn early is Google'ing for information, (particularly if that leads to information on StackOverflow) - when you're facing something difficult that you don't understand, then it often helps to dig for information from multiple different sources (whether those websites, blogs, other tutorials, youtube videos, other courses, etc. A single source of information is rarely enough by itself)

Thanks that's really helpful, do you think it would be best to take the course you first linked or try program something. I've done a bit with python. Also you think it would be beneficial if I get the certificate for the course?
Original post by James1g1
Thanks that's really helpful, do you think it would be best to take the course you first linked or try program something. I've done a bit with python. Also you think it would be beneficial if I get the certificate for the course?

Python is a good language, and you could try building a web app in something like Flask or Django if that interests you
(Microsoft have a nice little set of 6x "getting started" guides for using Python and Flask with the Visual Studio IDE to build a basic web app):
https://docs.microsoft.com/en-us/visualstudio/python/learn-flask-visual-studio-step-01-project-solution?view=vs-2019
Visual studio turns out to be a pretty good tool for Python these days (Visual Studio 2019 community edition is the 'free' non-commercial version), although there are others including JetBrains' PyCharm too.

There's another good set of tutorials for Python and Flask here: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

I wouldn't worry about the EdX certificates to be honest - they're not really worth anything - most companies (especially big tech companies) aren't too bothered about what qualifications you've got; they're interested in being able to see strong, demonstrable evidence of your ability to think logically and solve problems, as well as seeing what kinds of projects you've worked on, what kinds of technologies you've used before, understanding how you think and how you'd cope when faced with big, difficult problems.

The Harvard cs50 course is mostly a programming course but it gets into the core of computational thinking as well, and the problem sets which it uses as part of the course will get you writing code and algorithms, so it's a really good place to start. You'll rely on those skills (including knowing the terminology, and ways of thinking about problem solving) in order to help understand the kinds of frameworks used for building apps.

For example, if you want to build a server-side web app using Python, then programming and problem solving skills are necessary in order to understand the Python web app frameworks (Python's web app frameworks are Django or Flask -- don't worry about these just yet though). Python is a decent language for building web apps; and realistically speaking if you can get through the CS50 courses then doing the same Python shouldn't be too much of a problem -- again, the programming skills are about common ways of thinking that apply to any programming language, whereas each specific language itself is really just a tool with its own syntax and grammar.


Software engineering covers a whole spectrum of skills and usually a whole long list of different technical "ecosystems" to choose from (people tend to need to choose one and stick with it). So in the long term, you will need a bunch of other skills for software engineering, including:

Tools: Using your IDE and the debugger for the programming language, using "git" (GitHub or GitLab) for source control.
Databases: SQL, database design, data modelling and normalisation, using a programming language with an "ORM" library to connect to a database.
Code Quality: defensive code, following coding standards, adopting 'good habits', writing small functions/classes, good naming habits, commenting.
Testing: Learning a unit testing library, Test-Driven-Development, learning to think about testing against edge-cases and failures
OO Programming: Classes, inheritance, polymorphism, constructors
Software Design: Design principles (abstraction, separation of concerns, encapsulation SOLID and GRASP principles, "OO" design patterns)
"Functional" Programming paradigm: immutability, higher-order functions, lazy evaluation.
Data: Data structured as CSV and JSON (and XML). RegEx string "pattern matching", general string manipulation
Concurrency: including parallel processing, asynchrony and multi-threading.
Operating Systems: Comfortable with at least one O/S - scripting, deployment, configuration, security (users/roles/permissions/certificates/etc.),
Cloud Platforms: It's helpful to know how to deploy your apps on a platform like AWS or Microsoft Azure, and how to use "infrastructure as code".
Web Development: HTTP communication, web app debugging using browser "F12" tools, at least one back-end web framework (e.g Flask or Django)
Software Development Process: understand a bit about "agile", plan a personal project using a backlog with task breakdowns (e.g. Trello kanban board).

Also, the advanced features of whichever back-end programming language you decide to use will be important. E.g. in Python it's essential to understand Python-specific concepts like List comprehensions, Decorators, Generators, Itertools, Functools.

On the other hand, the advanced features of another language like C# would be different. For C# you'd want to understand a whole bunch of things which are in C# but not Python - including "async/await", Generics, Events, LINQ, Extension Methods, Reflection, Attributes/Annotations...


It can also help to do some other things as well, such as getting involved in an open-source project: https://www.firsttimersonly.com/

And also if there are any "tech meetups" in your area then that can be great for getting along to some interesting events, finding out more, doing some social networking, and talking to other people who are enthusiastic about the same kinds of things: https://www.meetup.com/find/tech/
You often get a whole mix of people at these events, including hobbyists, students, professionals, teachers, and pretty much anyone who just happens to be interested, so these can be very good communities to be part of. Also a good chance to get involved in things which might interest you like "hackathons".
(edited 4 years ago)
Reply 4
Original post by winterscoming
Python is a good language, and you could try building a web app in something like Flask or Django if that interests you
(Microsoft have a nice little set of 6x "getting started" guides for using Python and Flask with the Visual Studio IDE to build a basic web app):
https://docs.microsoft.com/en-us/visualstudio/python/learn-flask-visual-studio-step-01-project-solution?view=vs-2019
Visual studio turns out to be a pretty good tool for Python these days (Visual Studio 2019 community edition is the 'free' non-commercial version), although there are others including JetBrains' PyCharm too.

There's another good set of tutorials for Python and Flask here: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

I wouldn't worry about the EdX certificates to be honest - they're not really worth anything - most companies (especially big tech companies) aren't too bothered about what qualifications you've got; they're interested in being able to see strong, demonstrable evidence of your ability to think logically and solve problems, as well as seeing what kinds of projects you've worked on, what kinds of technologies you've used before, understanding how you think and how you'd cope when faced with big, difficult problems.

The Harvard cs50 course is mostly a programming course but it gets into the core of computational thinking as well, and the problem sets which it uses as part of the course will get you writing code and algorithms, so it's a really good place to start. You'll rely on those skills (including knowing the terminology, and ways of thinking about problem solving) in order to help understand the kinds of frameworks used for building apps.

For example, if you want to build a server-side web app using Python, then programming and problem solving skills are necessary in order to understand the Python web app frameworks (Python's web app frameworks are Django or Flask -- don't worry about these just yet though). Python is a decent language for building web apps; and realistically speaking if you can get through the CS50 courses then doing the same Python shouldn't be too much of a problem -- again, the programming skills are about common ways of thinking that apply to any programming language, whereas each specific language itself is really just a tool with its own syntax and grammar.


Software engineering covers a whole spectrum of skills and usually a whole long list of different technical "ecosystems" to choose from (people tend to need to choose one and stick with it). So in the long term, you will need a bunch of other skills for software engineering, including:

Tools: Using your IDE and the debugger for the programming language, using "git" (GitHub or GitLab) for source control.
Databases: SQL, database design, data modelling and normalisation, using a programming language with an "ORM" library to connect to a database.
Code Quality: defensive code, following coding standards, adopting 'good habits', writing small functions/classes, good naming habits, commenting.
Testing: Learning a unit testing library, Test-Driven-Development, learning to think about testing against edge-cases and failures
OO Programming: Classes, inheritance, polymorphism, constructors
Software Design: Design principles (abstraction, separation of concerns, encapsulation SOLID and GRASP principles, "OO" design patterns)
"Functional" Programming paradigm: immutability, higher-order functions, lazy evaluation.
Data: Data structured as CSV and JSON (and XML). RegEx string "pattern matching", general string manipulation
Concurrency: including parallel processing, asynchrony and multi-threading.
Operating Systems: Comfortable with at least one O/S - scripting, deployment, configuration, security (users/roles/permissions/certificates/etc.),
Cloud Platforms: It's helpful to know how to deploy your apps on a platform like AWS or Microsoft Azure, and how to use "infrastructure as code".
Web Development: HTTP communication, web app debugging using browser "F12" tools, at least one back-end web framework (e.g Flask or Django)
Software Development Process: understand a bit about "agile", plan a personal project using a backlog with task breakdowns (e.g. Trello kanban board).

Also, the advanced features of whichever back-end programming language you decide to use will be important. E.g. in Python it's essential to understand Python-specific concepts like List comprehensions, Decorators, Generators, Itertools, Functools.

On the other hand, the advanced features of another language like C# would be different. For C# you'd want to understand a whole bunch of things which are in C# but not Python - including "async/await", Generics, Events, LINQ, Extension Methods, Reflection, Attributes/Annotations...


It can also help to do some other things as well, such as getting involved in an open-source project: https://www.firsttimersonly.com/

And also if there are any "tech meetups" in your area then that can be great for getting along to some interesting events, finding out more, doing some social networking, and talking to other people who are enthusiastic about the same kinds of things: https://www.meetup.com/find/tech/
You often get a whole mix of people at these events, including hobbyists, students, professionals, teachers, and pretty much anyone who just happens to be interested, so these can be very good communities to be part of. Also a good chance to get involved in things which might interest you like "hackathons".

I appreciate you writing all this out it must of taken long. I think I'm going to program something which I'll be able to show to people. Would you think it would be better if I code a sort of game on pygame or make an app or website sort of thing. If you think it's best for me to make an app or website what would you recommend me to do it on ( what to download and stuff) .

Or do you think I should still do that course thing you linked first if so still what should i do after?
Thanks
Original post by James1g1
I want to be a software engineer working for Google or something and I was thinking if it would be good if I program something. I'm not sure what program language would be best to use and any suggestions for what I can do would be helpful. Thanks

This is the wrong way around. You need to find what you are passionate about, and pursue that.

Programming is a vast area, with different languages for different applications. 'C' could be a good starting point for lower level programming, or a scripting language (e.g. bash shell scripts) for a more general introduction. As has been said, the language doesn't matter so much as actually writing some code, and enjoying it. It takes aptitude and a lot of time and effort to develop good design and coding skills.
Reply 6
I have made several programs in python such has calculators and more complex things.I have looked into making a python game before i just dont know if its good or if there are better things to do.
Reply 7
Original post by RogerOxon
This is the wrong way around. You need to find what you are passionate about, and pursue that.

Programming is a vast area, with different languages for different applications. 'C' could be a good starting point for lower level programming, or a scripting language (e.g. bash shell scripts) for a more general introduction. As has been said, the language doesn't matter so much as actually writing some code, and enjoying it. It takes aptitude and a lot of time and effort to develop good design and coding skills.

I understand this and i do enjoy coding i just want to figure out if its best to do it on python or if i should download something else.
Thanks
Original post by James1g1
I understand this and i do enjoy coding i just want to figure out if its best to do it on python or if i should download something else.
Thanks

It really depends what you want to build. Python would be a good choice for building some web services, although for the 'front end' you'd need to learn about web technologies and web development too. (HTML + JavaScript and a UI framework like Angular or React). Or you could continue using Python to build games with PyGame too, and that's also fine.

On the other hand, if you're interested in doing something related to embedded systems and microcontrollers then C++ is a much more suitable language, and you could investigate using that with an Arduino board.

Or if you want to build a game with the Unity3D engine then you'd need to look at C#

Or for Android mobile device apps, Java would be a good language to start with.

(Java and C# are also good for back-end web services too. Java has the "Spring" framework, and C# has the "ASP.NET" framework -- those are both similar to the kinds of things you'd get with Python when using the Flask or Django frameworks)

Python, Java and C# also all have 'desktop' GUI frameworks regular windowed UI apps, and all kinds of libraries for working with databases, and connecting to web APIs over HTTP, and many more things.

However, the point is that it doesn't really matter which language you choose - the core skill of programming is the same; and realistically you always need to know more than just the language too - there are always other tools and frameworks involved before you can build anything which is useful. The time and effort which goes into learning programming is pretty much the same in any language too

With that said, the easiest languages to focus on will be those which have tonnes of community support, documentation, tutorials, online courses, etc. That's why Python is a good choice along with Java or C#. (C++ unfortunately suffers from of a lack of many decent online courses/tutorials, so that makes it harder compared with C# or Python)
(edited 4 years ago)
Original post by James1g1
I understand this and i do enjoy coding i just want to figure out if its best to do it on python or if i should download something else.
Thanks

Python is fine. Once you have the experience and have tackled a larger project, you may want to pick another language for a specific project.

What programming projects have you done?
What's next?
Sorry to interject but I'm just wondering is Ruby and Ruby on rails and java script good programming languages for software engineering or if you knew all these 3 would that not be enough?Also what are you thoughts about people who don't get a uni degree or get an unrelated degree to computing and instead go to those coding bootcamps like the flatiron school?
Thanks for the reply :smile: I forgot to add HTML and CSS into the mix.When I was looking at a lot of these coding bootcamps most of them seem to do the languages I mentioned.What kind of stuff could you do if you only know Ruby,Javascript,HTML,CSS-could you make apps+websites with that?What would your limitations be?Do you think those intensive bootcamps available to teach people coding and help them get jobs related to software,prepare people adequately?What do employers think about them?
Reply 12
Original post by winterscoming
It really depends what you want to build. Python would be a good choice for building some web services, although for the 'front end' you'd need to learn about web technologies and web development too. (HTML + JavaScript and a UI framework like Angular or React). Or you could continue using Python to build games with PyGame too, and that's also fine.

On the other hand, if you're interested in doing something related to embedded systems and microcontrollers then C++ is a much more suitable language, and you could investigate using that with an Arduino board.

Or if you want to build a game with the Unity3D engine then you'd need to look at C#

Or for Android mobile device apps, Java would be a good language to start with.

(Java and C# are also good for back-end web services too. Java has the "Spring" framework, and C# has the "ASP.NET" framework -- those are both similar to the kinds of things you'd get with Python when using the Flask or Django frameworks)

Python, Java and C# also all have 'desktop' GUI frameworks regular windowed UI apps, and all kinds of libraries for working with databases, and connecting to web APIs over HTTP, and many more things.

However, the point is that it doesn't really matter which language you choose - the core skill of programming is the same; and realistically you always need to know more than just the language too - there are always other tools and frameworks involved before you can build anything which is useful. The time and effort which goes into learning programming is pretty much the same in any language too

With that said, the easiest languages to focus on will be those which have tonnes of community support, documentation, tutorials, online courses, etc. That's why Python is a good choice along with Java or C#. (C++ unfortunately suffers from of a lack of many decent online courses/tutorials, so that makes it harder compared with C# or Python)


Thanks a lot this has helped me and i think im going to work with Python and possibly java.
Oh :colondollar: So what matters in the end is how skilled you are and your portfolio? Some people criticise computer science degrees because they think you have to learn some thing which they would consider irrelevant and don't always learn some of the most up-to date information and think coding bootcamps are better in terms of it being more practical and more about industry rather than learning theory and is more efficient in the amount you learn in that period of time?This is what was said when I researched it,but Im not sure if there is much truth to it?I'm just trying to get different opinions on this :colondollar: Just wondering if you don't have a university degree would you be a lot more limited in your employment opportunities or if you show them your skills they wouldn't mind too much in most cases?
Thank you for the tip :smile: What are your thoughts on Ruby and Javascript in terms of employability?
Did you do a computer science degree or are you self taught? :smile: What are your tips for learning programming languages and frameworks?I used to know some python but can't remember anything about it anymore :frown:
Thank you :smile: Which other programming languages do you think I should avoid because they're going out of date?
Thanks for the in-depth,much appreciated response :smile: Found the coolest thing btw,this article that was recommended in that article you sent me:
https://arstechnica.com/information-technology/2013/07/with-zero-coding-experience-artist-building-180-webpages-in-180-days her blog is really good,had fun checking it out!I should do that!Any tips on how to get started to do what that girl did in that blog? :biggrin: Some bootcamps have a policy of where if they don't manage to help you find a job after you have money back guarantee after 6 months?
(edited 4 years ago)
That's really embarrassing :facepalm::colondollar: Edited it now.
So let's say I want to do a basic webpage like she did,what application on my computer do I need to download to code for it-I have an Imac?The only programming app I have is for python and I don't know how to code in python anymore-it's been 2 years! :cry:So do I just google this how to make a basic webpage or look for some basic tutorial and replicate that?

Quick Reply

Latest

Trending

Trending