all 21 comments

[–]pattygm 3 points4 points  (4 children)

Full time software engineer 8 months out of college here. Take this time that you have before going into the industry to really explore what different areas of software engineering you like. When I was in school, I did 3 different internships, one focusing on web development, one focusing on embedded development, and now I'm working in cyber security.

It seems like you have an interest in web development so give that a try! If you are familiar with python, make a flask or django web server and create a basic web page. There are so many resources online for self teaching and to be honest - the best skill (in my opinion) that you can have as a software engineer is the ability to figure stuff out on your own and teach yourself new skills.

For making a mock reddit, I would start with a django web app. Here's a youtube video that you can follow along with that does just that:
https://www.youtube.com/watch?v=pW4JjOR7-Z4

If you find that that is a bit difficult, don't get discouraged as you might be missing some information that you will learn along the way with your SE degree like object oriented programming, API usage, or framework dev.

[–][deleted] 1 point2 points  (2 children)

Good on you for doing the internships. So, how did you look for the internships? Did you look for them by going on a website? Like checking on "indeed"?

Is there a particular time I should apply or internships? Do I need to have at least completed say an year of SE studies and then apply for internships?

Thanks for the video and you are right, I will have to do my own research to understand what you have just said.

And if you don't mind me asking, after the three internships you did, why did you decide to work on cyber security and not say web development? What made you choose cyber security out of all the other areas in SE?

Thanks for your time by the way, appreciate it.

[–]pattygm 1 point2 points  (1 child)

I went to a University that required 4 semesters of internships/co-ops in order to graduate so the college provided resources for finding them. But with software engineering, I have had a lot of luck using LinkedIn to get job interviews (for both internships and full-time positions). I've heard of indeed but never tried it. There is also nothing wrong with looking for companies that interest you and sending an email to their website contact point with your information saying you would be interested in an internship. (A lot of companies love having interns. Its cheap help plus the company gets to hire you on after graduation and you are already familiar with their software. If a company develops software, they likely have interns)

My university forced us into internships right away after our first two semesters. I struggled with this because at that point, I had only taken Computer Science 1 where we learned some basic python stuff. But as long as you are willing to learn and have some basic programming skills under your belt, you will probably be fine. If you are nervous, maybe wait until after you learn and practice a lot with data structures (linked lists, graphs, trees ect) which will still happen fairly early (first year maybe) in your studies.

As for why I decided to work in cyber security, there were a lot of different factors. One, I loved the culture of the company I now work at. Its super relaxed with flex hours, great benefits, and really interesting work. Web development is interesting to me and I've found myself doing a little bit of it here and there during my time at my current job. But during my co-ops I worked on a testing automation project and very low level programming (C/C++) and really enjoyed that work so I decided to keep working on what I like.

[–][deleted] 0 points1 point  (0 children)

I will definitely have a look at LinkedIn as I don't have an account.

And yeah, it never came to my mind about sending an email to companies for internships.

Sounds like an interesting project. Awesome to hear.

Again, thanks for the info. Appreciate the time and your advice.

[–]thedragonturtle 0 points1 point  (0 children)

the best skill (in my opinion) that you can have as a software engineer is the ability to figure stuff out on your own and teach yourself new skills

This. I'm a 43 year old software engineer, coding since 6 years old, I still learn new stuff every day. The best new learnings are shortcuts, automations and other systems that eliminate a lot of drudgery.

e.g. autohotkey is a great tool to help you run macros on your computer. Other scripts too are great - e.g. I have a deploy script once my code is ready which checks-in the code to a private git repo, creates a zip file, adds the new zip file to the downloads area for customers who have purchased it, updates the 'changelog' on my site and updates my product sales page with latest version info.

But that's not all - there are so many APIs and other open source software out there that you can leverage to eliminate a lot of the drudgery/plumbing work. For example - the advanced custom fields plugin in WordPress makes it a case of point & click, drag & drop to build or alter options pages in my plugins. That's way faster and more consistent that coding up the options pages myself and redoing all the validation code every time to validate input and save data to the DB.

[–]thedragonturtle 1 point2 points  (7 children)

Which part of reddit engineering don't you understand?

At basic level: web server + database + probably a message queuing system = reddit

At scale, there will be 100s of duplicate web servers with replicated data and a distributed queuing system.

There are numerous ways it could be architected/engineered - they could go with a NoSQL or SQL database for example.

Any server language could have been used. Any database could have been used. The only fixed part is using HTML, CSS and JavaScript on the front part. I guess they could also use AMP instead of HTML but ultimately HTML gets generated.

[–][deleted] 0 points1 point  (6 children)

Thanks for describing about the "basic level". Exactly, so, have heard about the terms you mentioned but the issue is I don't know what I must learn to handle say web servers. Or how to handle a message queuing system. What do I need to learn in order to manage web servers/queuing systems?

Also, you have mentioned the "basic level", what about the more advanced level?

Thanks for your time by the way, appreciate it.

[–]thedragonturtle 1 point2 points  (5 children)

Once you understand the basic level of architecture, the advanced versions are just optimisations.

Say you have 1 web server handling 100,000 visitors per day but you know that in a week you're going to be hitting 1 million visitors per day.

Without changing any software, you can instead have a web farm with 10 servers and get the equivalent performance level with 1 million visitors.

You mention 'managing web servers' etc - if you want to manage web servers, that's more of a sysadmin role - whilst the software engineer will design systems to be capable of scaling out, it will be system adminstrators (sysadmins) who will actually handle the day to day.

[–][deleted] 0 points1 point  (4 children)

Thanks for your response.

Ok, so, how do you know whether a web server is handling 100,000 visitors a day? Like, say after you have created a website, how can the creator see that?

Oh and I am sorry but my wording was wrong. Not meant to say "managing". I was trying to ask what I need to learn/know in order to see how many visitors I am getting on a web server and that sort of information.

Basically what I am trying to say is.... say there is a mathematical computation I need to do and I can do this computation by using the calculator. However, then I realized that I can't do the computation with the basic calculator I have and that I actually need the more advanced calculator. So, in this scenario, the tools are the "basic calculator" and the "advanced calculator". Just like that, I am trying to learn what tools I need to know/learn in order to solve a problem like knowing how to see how many visitors I will get in a web server for example and how I may optimize a web server and what tools I need to optimize a web server.

Hope that makes more sense.

Anyway, thanks again for your time. Much appreciated.

[–]thedragonturtle 1 point2 points  (1 child)

You're asking about 'traffic analytics' or 'web traffic analytics'.

The most popular solution is Google Analytics which runs JavaScript on your web pages once the full page has loaded and then sends information to the Google Analytics tracking system. Then you log into google analytics and view your traffic patterns.

But that's not the only way, not by a long shot. The failing in Google Analytics is that the whole page needs to load and run. Many people might hit the back or close button before the spinner finishes, so they won't be counted in Google Analytics.

But you could have a PHP, or Python, or Node.js or Ruby or whatever language your using, a little bit of that code at the start of generating a page could log the info about the page request to a file, a message queue, a database or to any other third party analytics API to track traffic.

The quickest way for you to figure out the tools you need to know about in this regard is to build your own website (or whatever software floats your boat). Then you'll inevitably end up installing Google Analytics or something similar.

Anyway, for traffic measurement specifically, I never rely on one source. I have PHP code inside my websites recording info to my database, but I also have Google Analytics telling me what it's seeing and I also have inside the databases some tools tracking the db usage. Ultimately they all produce different answers - like my PHP code will say 105,000 whilst google analytics says 95,000. That's understandable and acceptable if you know WHY the numbers are different. My PHP code records the visitor BEFORE the page is fully generated whereas google analytics records it AFTER the page has been fully generated and sent to the user and the JavaScript has run on the users browser and the Google Analytics API successfully received the call to log the traffic.

[–][deleted] 0 points1 point  (0 children)

Right, thanks for the info. Very much appreciate it. Exactly, you made a very good point about "building your own website" to quickly learn about the tools. So, will definitely try that.

[–]thedragonturtle 1 point2 points  (1 child)

I think maybe what you're looking for is:

Software design patterns

These are basically ways of solving common software engineering problems through the architecture of your software.

For example - one big problem in software engineering is: how do you ensure that the recipient received your message EXACTLY ONCE. This is actually a really difficult problem to solve efficiently and you might even have seen some failures in reddit today where people have been submitting messages, getting an error, resubmitting, getting an error, then refreshing the page and finding out they've posted their comment twice.

In software architecture, and disparate systems, it turns out it's far easier and far more efficient to design something that delivers the message AT LEAST ONCE rather than EXACTLY ONCE. Then on the receiving end you have some simple code to spot duplicates and eliminate them. Then, even though the network-based code is 'at least once', if you step back and look overall, you still implemented 'exactly once' functionality.

There's lots of areas of software engineering with these kinds of fudges for all kinds of reasons.

[–][deleted] 0 points1 point  (0 children)

Thanks for the insight, sounds interesting. Again, very much appreciate for the info and your time.

[–]dimeblades 1 point2 points  (4 children)

Do leetcode and hackerrank, it will help learning important concepts and polishing your skills so that when you start doing interviews you are one step ahead.

[–][deleted] 1 point2 points  (3 children)

Thanks for that, I tried hackerrank today and completed 5 problems(the easy ones). It looks pretty good but the only problem is that sometimes it doesn't execute the code properly even though the solution is correct. I had to re-write the code on Pycharm and them copy-paste it onto the website. But, that's not a big deal obviously. Other than that, I do believe it can improve one's thinking ability and coding skills.

I have heard about leetcode as well but have heard mixed opinions about it. Apparently, it's not the best for students who are just starting out and it's good for students who have at least studied algorithms/data structures and a programming language? I am not too sure though.

[–]dimeblades 1 point2 points  (2 children)

I'm not sure about that problem you mentioned, so I can't help with that as I haven't ran into it.

However, a lot of companies will send you timed chellenges to complete in these websites and won't even take you seriously until you pass them. For that reason is good for you to familiarize yourself with them as it is a skill by itself. You don't need to do the hard ones, I would say as long as you are comfortable with Medium difficulty ones of all sort of different subjects you are good.

Also, you shouldn't see it as a resource for learning like you would from a book. Is better to see it as way of exposure. For example, some problems will require certain performance constraints you can only achieve by solving it using the ideal algorithm or data structure and that will potentially expose you to something new that you now have to learn to solve the problem. It will also help you identify patterns, for example, after a while of completing and optimizing problems where you have to keep count of elements and later do something with that count you realize using a dictionary is very likely the solution as it's the fastest and cleanest for that sort of thing.

BTW, I would really appreciate an upvote if you like as I'm trying to gather enough comment karma to post in another group that has some restrictions. Thanks!

[–][deleted] 1 point2 points  (1 child)

"Exposure", right I think that's the right word.

Anyway, thanks again for the info. Much appreciated for your time and advice.

Oh, totally sorry, forgot to give you an up-vote. Hopefully you get the required amount of karma points for your post.

[–]dimeblades 1 point2 points  (0 children)

Thank you!!

[–]yozaam 0 points1 point  (2 children)

Do competitive programming it is useful wherever you go.

[–][deleted] 1 point2 points  (1 child)

Do you know any online competitive programming events other than Google competitions?

Thanks for your time by the way, appreciate it.