Software Engineering Career
Basic Skills
Here is a list of many of the key areas of knowledge a Software Engineer must bring together holistically to form a strong approach to engineering and an effective workflow to solve problems quickly.
- Bring all your knowledge to every situation.
- Deep knowledge of at least 1 high-level language like python and 1 lower level language like c/c++.
- Algorithms and Data structures
- Mathematics
- Rember to profile code, perform code coverage, use complexity metric tools and generate documentation.
- Architecture and design knowledge
- Programming principles and guidelines
- Principles of Software Engineering: https://www.d.umn.edu/~gshute/softeng/principles.html
- SOLID
- The Single-responsibility principle: There should never be more than one reason for a class to change. In other words, every class should have only one responsibility.
- The Open–closed principle: Software entities … should be open for extension, but closed for modification.
- The Liskov substitution principle: Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it. See also design by contract.
- The Interface segregation principle: Clients should not be forced to depend upon interfaces that they do not use.
- The Dependency inversion principle: Depend upon abstractions, not concretes.
- Refactoring
- Once you understand what the code you are refactoring is trying to do you can write tests to drive the creation of the refactored code
- So that even the refactoring process is test-driven
- Test-driven development
- Behaviour driven development
- Gathering Requirements and creating use cases
- Discussions and meeting notes
- Lexical analysis: nouns, adjectives, verbs
- Use cases: actors, attributes, actions
- Touch base with client/stake holder to access correctness
- Build prototype very quickly that mimics the interface for the user and nothing else with dummy interactions
- Return to previous sections according to feedback or begin development for real.
- For any area of software development see the roadmaps https://roadmap.sh/
- They can efficiently explain any area of the subjects, be it frontend, backend or otherwise.
- Roadmaps are a great reference and means of finding the right information fast.
Machine Learning Specific
- Understand the data and the problem. This will determine what type of model is best suited.
- Clean, prepare and transform data as required.
- Define model and hyper parameters (epochs, learning rate, batch-size, layer sizes , etc).
- Define loss function, back propagation.
- Iterate, evaluate how different variables weigh against variance in results.