Are you doing codewars? https://www.codewars.com/
I've not done loads of interviews (freelancer out of college, then looking for jobs) but this site has helped me brush up on things and discover new functions by trying to make my answers as compact as possible.
Other than that, just try to show soft skills as they tend to matter more (i.e be personable, reasonable, be able to explain your CV in detail etc.) and good luck!
Not specific to game dev, but maybe check out https://www.indiehackers.com/ to meet like-minded people who create indie web sites (often starting out as a "side-hustle").
I'd recommend books - the more, the better.
No degree is ever going to give you all you need. I graduated a software engineering bachelor. While it gave me a lot, only by reading I acquired the level of understanding of the software development process and the overall context in which software is embedded.
I can strongly recommend Joel on Software, Code Complete, Software Engineering by Ian Sommerville, and The Pragmatic Programmer.
When you start reading them, you will 1) learn what practices they recommend, 2) find more books to guide through the gazillion resources.
Look around for some decent blogs on whatever topics in software engineering you enjoy the most.
Dive into any of the topics you enjoy and practice what you learn. Example, well, let's take requirements engineering as a major part of any project. Go to your github repo and look around. Do you have tickets? Do you have a document under source control describing the mission of your code, a.k.a the problem statement, the expected outcome, the functional requirement. How did you come up with all this? Start by setting some standard procedures for yourself first and show quality control of your own process.
And most of all, have fun and talk with people about your work.
Definitely Clean Code by Robert C. Martin. There are great practices and principles for any software engineer working alone or in a team setting. Clean Code is ESSENTIAL
I actually made a video on my Computer Science Channel about the book
Your networking needs to span further than LinkedIn. Create a github and throw all of your projects from your bootcamp on there. Create a README.md for each project and explain what it is and what you learned from it in technical detail.
Create a portfolio, make it digital to show off your JavaScript skills. Use your SQL knowledge and create a database for people to leave comments about your projects. Host it on IIS, Apache, or nginx to show you have knowledge of operating system services, DNS, and TCP/IP.
Link your site and your github to your LinkedIn profile, and create links in your LinkedIn to your site and your github.
Create an extension of your site (or a new site) and make a blog or tutorial about your bootcamp experience, little tips and lessons you are learning along the way, or just random thoughts about being in tech culture.
Sources to get you started
I host everything on my own equipment on my own network, but I understand people have no interest in that (due to cost, heat, or bulky equipment) or aren't comfortable with that. So, use the sources below:
[Digital Ocean](digitalocean.com) [Linode](linode.com) AWS Azure
What kind of neural network are you training with? From your post it’s not really clear.
I think a hand-crafted neural net is probably overkill. If your tech choices aren’t limited, I’d recommend sticking with a library with loads of examples like scikit learn for example. From your problem description, it seems like muti-class classification (where the LeagueId is what the class you’re to predict) is what you’re looking for. I’m assuming in StarCraft there’s 4-10 different leagues like Bronze, Silver, Gold, etc.
A tutorial like this might help you get started.
Also, is GameId a GUID? Typically you’d want to remove that kind of randomized data.
Thanks a lot for those words. I just feel I overthink at times resulting in such thoughts. Being a junior developer, I also feel I should start thinking on learning more and get inspired from people around me instead of comparing myself to them. I also found this really good article on the internet which I think can help people like me.
https://www.freecodecamp.org/news/a-letter-to-myself-as-a-fresh-software-engineer/
This is basically standard practice. I typically just do some small things to review the language. That being said there are a lot of sites which people use to review. A quick Google gave me this list .
I would recommend hacker rank or code wars.
In all of your process into starting your new career you will not be the only one who struggles or feel you don't belong or not good enough. Some of this can come down to "impostor syndrome". But don't worry, try and remember every step of the way you have earned where you are, even now.
Onto the rest, everyone learns at their own pace so how fast you're learning or how well will vary person-to-person. Don't be too hard on yourself.
About bootcamps. I don't personally like them myself, and I have worked with people out of a bootcamp and those who are only self-taught and have found those who didn't attend a bootcamp and were just self-taught preformed better for some reason. Maybe it was they weren't trying to validate going to a bootcamp in the first place, not sure. But it works for some people so again, that depends if that's something you feel will help.
Take a look through free code camp and SoloLearn.
Those two will help you getting started.
And even if you go through a bootcamp, as soon as you finish some of free code camps tutorials and some practice on your own that you feel you have basics (loops, logica statements like if's, switch, even further by reading from data which could be a list of strings or an array or from an excel sheet) then start applying to all entry and Jr level rolls. People will hire as long as you can demonstrate you know basics like those listed and can fit in culturally.
Good luck!
Yeh I completely agree with what your saying there and I think it also falls under the testing pyramid https://www.browserstack.com/guide/testing-pyramid-for-test-automation
There's lots of unit tests at the bottom because there easy to do and cheap / easy to run.
However I think the tests as you described above are very wrong and that's why they didn't work and became an issue.
In the pyramid, UI tests are the top because there shouldn't be lots because it's slow and expensive.
I think as well there's lots of good stuff out there for writing good tests for example in browser testing you have cypress. Cypress is awesome and I use it for e2e testing of different journeys a user does. The outputs from that are super simple and can pin point exactly where a issue arises if something has gone a miss.
It's a balance at the end of day & I work with frontend UI tests, unit tests, API tests, browser tests; the full monty and don't get me wrong it's a bit overkill at times but when any of these run and find a problem your always thankful
Everything, I guess? You're not as constrained by resources anymore, you can use your C++ knowledge to create any kind of application. Or games, using the Unreal Engine, for example.
Higher level programming is more about learning frameworks; collections of libraries others have made. You might have a firm grasp on a language, but you'll be a student forever as the paradigm shifts quite a lot between the frameworks.
In your opinion, with my background, will I be able to land an interview at companies like what I listed above? Taking in a text like Code Complete would probably make me a better overall programmer, and I’m going to look into that to get me through the interview process.
I made some book suggestions here: https://www.reddit.com/r/C_Programming/comments/7bo321/comment/dpjsv8w
For software engineering generally, probably also Code Complete.
Sometimes I read a book because I need the thing now, or sometimes just out of interest. I don't think I've ever known what tools I'd need to know 12 months hence.
This! Before you criticize short methods read Clean Code and don't skip chapter 1 where it says:
>Consider this book a description of the Object Mentor School of Clean Code. The techniques and teachings within are the way that we practice our art. We are willing to claim that if you follow these teachings, you will enjoy the benefits that we have enjoyed, and you will learn to write code that is clean and professional. But don’t make the mistake of thinking that we are somehow “right” in any absolute sense. There are other schools and other masters that have just as much claim to professionalism as we. It would behoove you to learn from them as well.
>Indeed, many of the recommendations in this book are controversial. You will probably not agree with all of them. You might violently disagree with some of them. That’s fine. We can’t claim final authority. On the other hand, the recommendations in this book are things that we have thought long and hard about. We have learned them through decades of experience and repeated trial and error. So whether you agree or disagree, it would be a shame if you did not see, and respect, our point of view.
A lot of the tips, including this one, come from Uncle Bob's "Clean Code" book. I recommend picking it up for a much more thorough examination of Clean Code principles. https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
There are times when a 4 line restriction on function length is burdensome, but it tends to be a good guideline. Language also matters. I've found it's harder to adhere to the 4 line restriction in Node than PHP for example just based on typical syntax for the language.
You can use the update-refs flag when rebasing some requested changes / suggestions from a PR in the first branch to auto update the depending branch, regarding your two branches / PRs concern.
https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---update-refs
https://www.amazon.de/-/en/Jochen-Ludewig/dp/3898646629
find an english equivalent, read it. Sadly this one is only available in german. Pretty much Bible of Software Engineering (Theoritcal processes)
Not sure we’re you are in your path right now, but if I were to give my younger self some guidance:
See Software Engineering at Google Software Engineering at Google: Lessons Learned from Programming Over Time https://www.amazon.com/dp/1492082791/ref=cm_sw_r_cp_api_i_VZKRMDWCP8T5ZKV19XP0
Engineering is more that the above, but this highlights many of the concerns you must keep in mind.
Marketing and distribution will likely be your biggest pain point. You can quickly iterate once you have users who are happy and provide you with user feedback.
If you haven't already, check out the book traction, which talks about a few ways that software companies gain their first batch of users.
A software design book I found very useful is Fredrick Brook's (author of the Mythical Man-Month) Design of Design.
It covers some popular design methodologies from Waterfall to Agile, with pitfalls and notes.
Yet another great point of view on the subject, one has to stay objective and 'Agile'
May I share with you one of our articles that talks about it, hope it helps :)
https://zenkit.com/en/blog/agile-vs-waterfall/
Not exact situation but we could struggle with this choice in our team, so far we try to adapt each to the situation.
If you want to read more on the subject, you could check an article we wrote on our blog, hope it helps :)
https://zenkit.com/en/blog/agile-vs-waterfall/
These two are old but underrated in my opinion
Been an after-college software engineer for ~15 years, when I was starting out the #1 question recruiters and employers would ask is if I had a portfolio of some kind that proves I can code... you'll probably be asked this question... here's a way to prepare for it:
Once you have a good understanding and the projects are to your liking, read as many books as you can get your hands on related to coding, figure out what makes the most sense to you, and try to incorporate those features/tips into your projects. I didn't do this until a few years ago, and it was like putting jet-fuel into my career.
While you're doing that, pre-covid we had meetups, hackathons, and networking happy hours ... they'll probably have something like that soon, they're usually hosted by companies that are hiring, so you can talk to them, or make contacts ...
nowadays, either everyone is looking for a new job, or trying to hire ... it won't be easy, but it's definitely doable
This is what I used when I was starting with git and use for any questions I have about git https://git-scm.com/book/en/v2 but if this doesn't answer your questions, google and stack overflow is your friend
Github at the basics is just a website that hosts git repositories, there are quite a few of them out there, but Github is the most popular. (They are called "remotes" in git parlance). Especially since they added Github Actions and unlimited private repos. There are a LOT of bells and whistles that advanced git users/engineers can use and take advantage of (see github actions), to do automated testing, building, CI/CD, etc.
As a freshman, you probably don't need to know most of this advanced part. Just how to create and contribute (creating repositories, branches, Pull Requests, etc) to a repository.
(source: been using git professionally for 8+ years)
Well either way you should search out university career fairs and start looking for internships or coops. Also Udacity is a literally amazing online tutorial source. Find something you can have fun with.
Yes. I am a CS major, and so many of my classmates have dropped out or are taking breaks because they went into CS for the wrong reasons.
You need to be a self-starter, love research and problem solving, and be tenacious even when it might seem like you’re not making much progress.
It is very rewarding, though. I suggest OP get started with a book such as Problem Solving and Program Design in C. This was the textbook used in the first programming course I took. Learning C will give you a deeper understanding of the underlying concepts of programming than a language like Python. Linux was written in C, for example — it is the most influential language out there, and it’s the best first language to learn for so many reasons. Once you learn C, you will have no problem learning any other language, and this book is a great start.
I would also suggest getting some virtual machine software like VirtualBox and installing a Linux distro like Ubuntu (I’m assuming you’re running Windows). Linux knowledge will serve you well, and you will be amazed at how powerful certain Linux commands are, like grep and sed. Working with a terminal is a much different experience than the graphical user interface you get with Windows, and it takes time getting used to. Believe me when I say that, if you do decide to pursue computer science, you will be glad you have some Linux knowledge under your belt.
I think the most important thing, though, is to not get overwhelmed. It can be daunting as a beginner to try to figure out where to start in the process. Breaking a problem down into smaller problems is absolutely essential. That book I linked provides a really good starting point for the whole process.
Hi. Visual studio is a full blown ide by Microsoft. Visual studio "code" is a newer ide which is not as heavy as the original visual studio. Link to visual studio code: https://code.visualstudio.com/
As another poster stated, software engineering is not all coding. As an engineer, you will be involved in various aspects of requirements elicitation/analysis, planning, design, coding, testing, deployment, management (resource incl. personnel). And, yes, a lot of that means meetings.
While I think most of us who dive into it do it for the creative aspects associated with coding, you may find that you enjoy and have skills in the other areas. No two companies use the same exact process. So, you really need to just get involved and see how your company does it.
A number of companies start new employees in Quality (a subset of which is testing). You get to peer into current code, see where the product is, and write code to break existing code.
Writing large software is not solo. So, learn to use Git (one of the most common software repositories) effectively. It will help you manage your own incremental development and be able effectively integrate your code with others even if they develop at a different pace.
You can find a pdf manual for Git free online. Git Pro 2
Thanks for the response, it's helpful and makes a lot of sense -- keyUp gives an opportunity to call functions at every key press, rather than just on loading and clickable buttons. I fixed the link, in case you were curious: https://www.desmos.com/calculator
archbee.io for internal knowledge base because supports Markdown shortcuts and integrates with Github to bring the content into a single place if devs prefer that
- a block-based editor that's easy to use for non-engineer people, so that everyone can collaborate in a single place
still a new solution to the market, not sure if it solves what other tools are missing.
In the end is not always about the tool, rather the culture of documenting in a proper way the knowledge.
Also, it's important for the people that use the tool to actually like using it. It makes it easier to get them into the tool and write.
You can work on actual projects by doing the 30 days of code challenge. https://javascript30.com/
Free Code Camp is also another good resource. https://www.freecodecamp.org/
You can do it. Good luck!
You simply install the password manager first. And having the password manager on the phone makes it easy to lookup a single password.
I use Bitwarden, you can let them host the vault or you can host the vault your self.
Well, this is the kind of answer I was looking for though. I have never heard of feature flags as a practice before (I work for an enterprise company, I am out of the loop on a lot of things)
This is definitely what I mean, but I was hoping there was some more figured out parts using them. They seem pretty straightforward for creating multiple versions of an application at compile time, but still you would have to build a pretty complicated CI system to distribute apps with different features to different users, like if it is a web app that is supposed to be different based on user permissions. A quick search shows that there are definitely service products that are supposed do what I am talking about.
I mean, heck, what do you use to manage your feature flags? Or is it just something that you implement in your codebase...
https://www.elastic.co/guide/en/elasticsearch/reference/current/joining-queries.html
You can't really do joins. But as mentioned by others, if you're using mongo you shouldn't do joins anyway.
What does it mean to do all the reading from ES? You have to read from mongo to sync it with ES. And what's the point of writing to mongo if you never read from mongo?
I find this whole post fairly confusing...
Spend some time on https://www.freecodecamp.org/ and confirm you enjoy learning it and get some enjoyment out of it before investing any money. Software dev is good money but it requires you to spend a lot of time doing continuous learning as a career. It can also be incredibly frustrating if you are not someone who enjoys being challenged on a daily basis.
The real answer is that they're complex systems which have difficult-to-predict problems. This is explored in detail in the scary-storybook "Atomic Accidents: a history of nuclear meltdowns and disasters from the Ozark mountains to Fukushima", by Jim Mahaffey. Each failure is usually full of fascinating elements and lessons, which is why the industry practice is to compile a comprehensive postmortem report. Those reports are often published.
For example, Gitlab's 2017 database outage was required reading when it happened. My eyes still water when I read it.
Google's Satpocalypse from earlier in the decade didn't come out until years later, probably because it's embarrassing to admit having wiped all those disks accidentally at the same time.
I find the most fulfilling thing after getting your web project to work, is seeing it live on the internet. You can share the code and host your project for free using Github Pages. There are lots of YouTube tutorials showing how to do this.
It would depend on your website's tech stack. I am assuming its just plain HTML? If there is no backend then it would be quite tough. I am guessing convert27 has asked you to include their script your website. This script loads the javascript when your website is rendered. They then collect all the information and send it to their server via AJAX, store it and then send you an email with the information.
​
If you want to do this yourself, you could get a paid subscription of mailchimp. A simple blog post explaining how you could do this via AJAX and mailchimp
I find that solving new problems is the best way to solidify my understanding of a language/framework/etc.
Pick something you want to do (build a website, write an app, create a game) and start working on it. When you get to something you're not sure how to do, look online. Most likely somebody else ran into the same problem.
If you're really stuck, Stack Overflow is a great place to get answers, but try to post specific questions like "How do I listen for mouse clicks" rather than generic ones like "How do I make a game in C#"
Historically, if you're looking for a good way to hone your raw programming skills, http://projecteuler.net/ was a great resource. Unfortunately, they were recently hacked, and the part of their site that lets you check the answers to their programming challenges is offline. The challenges are still there, but there's no way to check your work.
>Is there such a cross language framework that will fit such requirements ?
Your problem isn't finding a framework, it's choosing one out of the hundreds available.
I've worked with a few different popular frameworks, the one I liked the most was Prometheus. I believe it is one of the most popular in the industry. Other big names that come to mind are Splunk, GCP Cloud Logging and Datadog.
Check out Exercism. It gives you a track to follow for a given language. You submit your answer, then others who are also learning can comment and critique your code. And it's free.
This isn't a "code performance" thing, but a huge pet-peeve of mine are images not being used properly and sucking up bandwidth.
Check out https://squoosh.app/editor to see a live demo comparing jpeg, png, webp, etc... at different quality levels.
So the gist of what you want is a bunch of devices that register with a server. The server stores a reference to what the device is, and uses that to push messages to them. If that's correct, I guess I'm still confused why do you need a special protocol? It's just back and forth comms between two devices, right? I would think that any transport protocol would work.
Also, with the added context, it sounds like you're implementing something similar to a smart home. Have you looked into OpenHAB?
You'd be better off to start with an existing browser. Like Firefox then try to rip it apart and see if you can reassemble and extend the pieces that you want.
E.g. most of Firefox is actually JavaScript modules assembling and dis/enabling the various C++/Rust/other components of the browser. You can dig into the internals and find quite a bit of it is accessable with just unzipping some files and playing with json configs.
Edit: a few more ideas for your multi language support idea off the top of my head:
Someone else below said webassembly jokingly. This is probably the most a viable (but rough) option depending on your actual goal.
another option is to look at how other environments like electron (or other standalone browser app environments) work. They might give some insight on how to extend the standard JS lib that is accessible in the DOM.
Another approach might be too look at how Java applets ran in various browsers (and formerly Flash). The object tag and plugins have mostly been removed, but might still exist in the codebase behind flags. In that case you could write your own plugin.
Last idea... either cross compile your language to JavaScript (similar to the wasm route) or write a JavaScript interpreter for your target language. These blog posts are interesting here:
Angular uses TypeScript which ultimately compiles to JavaScript, so Angular could be used for all 3 of your target platforms.
You can freely run .Net on your server to support your client-side code. Your .Net code will include HTTP API endpoints for your client-side code to call - either to fetch data or save data or both.
Because Angular is ultimately native JavaScript, you could use the Apache Cordova framework to build your iOS and Android apps from your single codebase.
Edit: although maybe you should also review NativeScript as it leverages TypeScript but also gives access to native (non-javascript) functions on the phones which will make your apps faster. https://www.nativescript.org/
Some random ideas: make a web game with PixiJS, a mail-merge command line utility, a mobile app for using cooking recipes hands-free, a Chrome plug-in to estimate how long it will take you to read an article that learns as you use it, write a program that gives you a customised view of your Facebook newsfeed, or your own web dashboard that pulls information from all your favourite websites into a single page. A MIDI ringtone generator, a chatbot that automatically answers your friends when you're busy (and asks them if it's something urgent), etc...
Think of something you want to do, pick a language to use/learn, look around for tools/frameworks/engines/libraries that might be helpful and use tutorials to get you started.
Because git is only one vcs. There are a ton out there, and the default command line git interface is only ONE of the interfaces to git. Also, there are a bunch of really good git porcelains beyond the basic ones covered in chapters 1 - 9 of the git book. Magit is a particularly good one built on top of emacs, that is extremely useful even if you don't use emacs for anything besides a more user friendly interface to git.
Asking questions about version control tools is kind of like asking questions about a particular texter editor or IDE. If you can learn a programming language (which has a much larger set of semantics and grammar than any IDE/VCS UI), then you should be able to pick up enough of the vcs UI of any vcs to be a contributor with a quick google search.
There are plenty of jobs if you can solve leetcode ( https://leetcode.com/ ) medium or harder problems without googling the solution and you are willing to move for a job. Do as many internships as possible, if you do well at an internship, you be offered a job.
First, resist the urge to buy that machine right now. Wait for the first week of class, see what tools you are going to use, and talk to the professor or other students. Overnight shipping is cheaper than buying more laptop than you need.
Second, resist the urge to buy something expensive. A Chromebook will probably do most of what you need, particularly if you do most work in a terminal or in the cloud.
https://dev.to/petermbenjamin/a-minimal-chromebook-setup-for-development--hacking-5292
You may take a framework for building real software, like Django, follow its documentation and make something on your own.
​
Check this out - https://www.djangoproject.com/start/
​
And forget about concepts like OOP for this time. All of programming patterns and approaches were developed to fight software complexity, when many people are working together during many man/years. Your first program won't be anything like that.
Yes normal visual studio rather than visual studio code. Link here: https://visualstudio.microsoft.com/vs/
Step by step guide here: https://docs.microsoft.com/en-us/visualstudio/ide/walkthrough-create-a-simple-application-with-visual-csharp-or-visual-basic?view=vs-2017
There's certainly a clear division between the roles of a project manager from the roles of a tech leader. In small companies, however, things tend to get mixed up sometimes. Not rarely, the formal idealized organizational charts won't reflect the actual layout of occupations. There is simply not many people around, so no one can specialize in doing one specific thing and the dynamics in the working environment become very organic. I have also been in this situation in the past.
Hired as "Computer Analyst" (don't ask me what a "Computer Analyst" is - no one ever succeeded in clearly explain it to me), but I think "swiss knife" would better describe my position in the company, which was a very small one (6 people only). I had to do everything: analysis, modeling, programming, maintenance, client support, etc. Hard work, but an incredible chance to learn more about the different phases of the software development cycle. Later on, all the effort paid off when all that I learned helped me to get jobs as tech leader and software architect.
​
>I would definitely ask for a raise.
You sure should.
What you're looking for is a mocking application. Some people will also refer to it as wireframe.
Here are a few examples:
I just finished reading ShapeUp and I'm super stoked to try it out with our team. Not sure if it's the best for all cases, but is definitely a modern approach that is very sensible and straightforward. https://basecamp.com/shapeup
the OBD-II I think is the API for the car. The scantool is just an adapter like this .
What you're saying makes a lot of sense. And I didn't know REST was just a model hehe. So those GET,POST,DELETE requests aren't from REST, they just use the REST naming style.
so for web development, people make their own APIs? they don't use a "REST library" to do GET, DELETE,POST functions?
I find the most impactful book for new developers is Robert Martin's Clean Code. It can vastly improve the quality of code you write.
As you get more experience I would suggest another book by Robert Martin, Clean Architecture.
This one is also great, especially if you're planning on focusing on backend, but it might be more useful when you've been on the job for a while
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems https://smile.amazon.co.uk/dp/1449373321/ref=cm_sw_r_cp_api_glt_fabc_WCZHP2SD9XFSNCNKY7AA
A Philosophy of Software Design is a good starting point https://smile.amazon.co.uk/dp/173210221X/ref=cm_sw_r_cp_api_glt_fabc_T32DQAHKYHM6YGJG781B
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin) (Robert C. Martin Series) https://smile.amazon.co.uk/dp/0132350882/ref=cm_sw_r_cp_api_glt_fabc_1X8Y5FPJEHWXXNXA3TCR
Otherwise if you want something more specific to what you'll be doing it depends on your position - is it backend, frontend etc
The Managers Path is a great resource. It walks you from being an IC, a tech lead, EM, director, and a VP of engineering by describing the people responsibilities for each level and describes tools you can use to be effective at each.
https://www.amazon.com/dp/B06XP3GJ7F/ref=cm_sw_r_cp_awdb_M1GQTXJHQ04HABWPT6RT
Best of luck on your journey!
At the time I loved it. When I was in college, I would be driving to school and admiring my Sony single din stereo and thinking to myself, "Man that's the kind of thing I want to code for". Keep in mind, this was before Raspberry Pi or Arduino or any of that stuff.
My first job out of school was all business apps... but I kept teaching myself C++ and within a few years had landed my "dream job" at the medical device company. I ended up staying there for almost 20 years haa haa.
During that time, I moved around projects, only about 12 of those years were actually working on the medical devices.
More likely what you want to know is this:
Even though it was an "embedded system", it was no different than say being a Linux dev. The devices ran VxWorks (I believe the same O.S. the Mars Rover runs), but still had SSD, ethernet, etc etc on PC104 stacks. Honestly, my first thought when I saw their medical device was "Wait, this is just a PC inside a box." But the system had real-time / deterministic requirements, and that's where things differ from say a Node.js backend running MongoDB :-)
And for those that don't know, when I say "Sony single din stereo", I mean something like this (but from many years ago): Sony Single Din Stereo Receiver
Personally I've been a fan of the Head First books. Note that OOP and Design Patterns kinda go together.
https://www.amazon.com/Head-First-Object-Oriented-Analysis-Design/dp/0596008678
> What are some examples of subdomains that you commonly see through multiple projects?
One example could be an inventory, warehouse, accounting. There's a good book about archetypes: https://www.amazon.com/Enterprise-Patterns-MDA-Building-Archetype/dp/032111230X#ace-g9859629705 Check it out.
> Do you write your own code for these subdomains, or do you generally rely on 3rd party products or middle-wares when available?
It depends. Sometimes it's worth writing those if your company wants to have a tailored solution and there's a domain expert. If the company is okay with 3rd party then I believe it's good enough to identify that and try to find a vendor that provides the desired functionality.
One of the best investments I ever made was buying Cracking the Coding Interview, written by Gayle Laakmann McDowell. It was the required text book for my Data structures and Algorithms course when I was doing my undergrad. It’s useful for 2 reasons: it does a really good job of teaching basics of data structures and algorithms, as well as Big O, and it’s also a great roadmap for applying to and interviewing at tech companies. Link for amazon: Cracking the Coding Interview
I give this advice to everyone on this sub who asks because it’s honestly the best advice ever. Buy this book (30$ rn on amazon):
Cracking the Coding Interview: 189 Programming Questions and Solutions https://www.amazon.ca/dp/0984782850/ref=cm_sw_r_cp_api_i_Ic6QCbQXY71DN
I give credit to the author and this book for landing me all my internships and a job at a FAANG. Read it, do what she says to do in the book, and if you still don’t get an internship, I’ll pay for the book.
https://www.amazon.com/-/es/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/
(link is not affiliated, simple link)
Excellent classic.
Check out Martin Kleppmann's Designing Data Intensive Applications: https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
I'm reading it right now. You should get this copy. I think if you're already an experienced dev though, you probably won't get much out of it; if not, then definitely pick it up because it's giving me a lot of insight, some things I wish some of my professors went over in lectures tbh.
Hi egnima_man! Sorry to hear that you're going through a rough patch. Thanks for reaching out! Being proactive definitely is the way to go!
I don't know the specifics of your particular case, so the best thing that anyone could do is give you very high level pointers.
I would like to recommend you the experience of someone who's dealt with all kinds of "negotiation" situations, although the book's underlying concepts are not about negotiating; it's more about how to coexist with other people.
The book is "Never Split the Difference: Negotiating As If Your Life Depended On It". It comes from Chris Voss, former FBI hostage negotiator. He developed the modern approach to negotiating hostage situations, helping save many, many lives.
A very short and single viewpoint summary is that it's about helping others help you.
I recommend everyone reading through this book, because it has had a very high return on my life, and because it's not about imposing your will; it's about sharing it.
Here's an Amazon link: https://www.amazon.com/Never-Split-Difference-Negotiating-Depended/dp/0062407805
Feel free to ask me any questions!
I'm an embedded software engineer and I don't do much calculus. I do mess around with polynomials (which is just simple algebra) quite frequently. Polynomials are great ways to represent a nonlinear set of values for modeling analog sensors. My background is in electrical engineering so understanding Fourier analysis is really useful too but I haven't used it much which reminds me I probably should do a quick refresher on that soon.
I recommend this book to any software engineer no matter their level. It was an amazing read and gives you some insight on core methodologies to problem solving and just learning in general
This is a common challenge, and gets harder with marriage/kids/more job responsibilities/etc. I've been in the industry for ~25 years, and it has always been a constant struggle. The short of it is that you need to make the time. Personally, I run and do pilates for my exercise, total of 6 days a week, 1 hour a day. Where I work is conducive to exercise as we have a locker room and showers, so I do it there. To give you an idea of my schedule, I'm up at 4:40, on the train by 5:40, at the office by 7, exercise and clean up and in my seat by 8:30AM. I'm usually in bed by 10:30PM. I never thought I could run, but I used the book Running for Mortals . It literally changed my life. *EDIT* And I recommend Fitness Blender, TONS of free pilates videos on YouTube, from intro level to "dear god I want to stop" level.
A couple quick recommendations:
For a technical slant, this book is fabulous:
I think the best way is to read a resource that teaches the best practices in the language. Otherwise you will find that you write in the new language with the old language style. I think this is because of thinking, "I know how to solve the problem in JavaScript, now how would I do the same solution in Java?", without considering other unkown patterns that are possible. Googling for the right syntax is more harmful than beneficial in that case.
For java, I would recommend Effective Java by Joshua Bloch.
A book? The War of Art by Steven Pressfield, and maybe Mastery by Robert Greene
“The most pernicious aspect of procrastination is that it can become a habit. We don’t just put off our lives today; we put them off till our deathbed. Never forget: This very moment, we can change our lives. There never was a moment, and never will be, when we are without the power to alter our destiny. This second, we can turn the tables on Resistance. This second, we can sit down and do our work.”
Excerpt From: Steven, Pressfield. “The War of Art.” FastPencil PREMIERE, 2010-10-11T07:00:00+00:00. iBooks. This material may be protected by copyright.
I'm a non-traditional student myself in a similar situation. Embedded programming is in the realm of Computer Engineering (not to imply that someone from a parallel discipline wouldn't use it). Software Engineering is a specific tool set that computer engineers and electrical engineers do not normally receive, but computer science students usually do, that includes project, team, and time management.
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series) https://www.amazon.com/dp/B001GSTOAM/ref=cm_sw_r_cp_apa_-6Q5zb1V6MSK5
This is one example of a popular software engineering text that explains some of the basics of the discipline.
I suppose what I'd share from my experience is study what you find interesting and don't worry about what title you end up with. Hopefully someone out in the field will be able to offer a more nuanced perspective.
I second this. It's a decently small format that is about issues that affect you everyday and are from my experience and the ones of my colleagues, not tackled at all at school, and not learned through experience in the industry.
Clean Coder and the pragmatic programmer are 2 other books that are about professional behavior and gives you a lot of elements as regards handling communication with your project manager or other coworkers !
That would be awesome if there were more soft skills training available. IMO It's the biggest missing piece in the software industry. There's some good books out there, though. Crucial Conversations is one. Another one is Peopleware. I also kicked around participating in my local Toastmasters but that was more for presentation skills. A professor I had in my master of software engineering program was always reminding us to "tell your story" and not only (or even primarily) talk about technical details when communicating about a project, but instead give it the human side and how it benefits the person listening.
I'd like to plug my alma-mater, Seattle University.
Seattle U was the first to award a Master of Software Engineering degree in the world (in 1982), and boasts notable alumni like Steve McConnell, the author of Code Complete and founder of Construx.
The classes are all offered in the evening which allows the degree to be earned while you continue working a full-time job.
The program holds a very close relationship with Silicon Valley II industry (think Microsoft, Amazon, Google, etc.) which includes adjunct faculty from these companies and full-time faculty who formerly worked there (more from Microsoft than elsewhere).
It is expected that you work on practical, team projects throughout the degree and in the final year, you work closely with industry in a team of students who complete a year-long software project.
The permanent faculty are active in software engineering professional and academic circles meaning you will find academic rigor in addition to practical industry experience. Dr. LeBlanc was actually the co-chair of the Joint ACM/IEE effort to develop undergrad Software Engineering curriculum ("Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering"). See http://sites.computer.org/ccse/. And Dr. Roshandel is a member of the ACM SIGSOFT group with a long list of publications. Just to mention a couple!
Here's the degree page: https://www.seattleu.edu/scieng/computer-science/graduate-degrees/master-of-software-engineering/
Database Design for Mere Mortals is a good intro to relational database generalities, and Fundamentals of Database Systems is a good one for getting into the internals of them i.e. relational algebra and set theory.
I'm a non-traditional student myself in a similar situation. Embedded programming is in the realm of Computer Engineering (not to imply that someone from a parallel discipline wouldn't use it). Software Engineering is a specific tool set that computer engineers and electrical engineers do not normally receive, but computer science students usually do, that includes project, team, and time management.
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series) https://www.amazon.com/dp/B001GSTOAM/ref=cm_sw_r_cp_apa_-6Q5zb1V6MSK5
This is one example of a popular software engineering text that explains some of the basics of the discipline.
I suppose what I'd share from my experience is study what you find interesting and don't worry about what title you end up with. Hopefully someone out in the field will be able to offer a more nuanced perspective.